NOIP 1199 合并果子终于做出来了…
2012-12-05 17:08
225 查看
这里应用了快排加插排的方法,首先对所有果子排序,然后每找到一个新的果子堆的时候就插入到新形成的序列中,同时比他小的依次前移两位,比他大的依次前移一位。
#include<stdio.h>
#include<stdlib.h>
int a[10],n;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int
i,s=0,j,x;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),cmp);//先对果子堆进行排序
while(1)
{
if(n==1)
break;
a[1]+=a[0];
x=a[1];
s+=a[1];//记录所需要的体力
i=2;
while(a[1]>a[i]&&i<n)
i++;
for(j=2;j<i;j++)//比新形成的果子堆小的依次前移两位
a[j-2]=a[j];
a[j-2]=x;//插入新的果子堆
for (j=j-1;j<n;j++)//比他大的依次前移一位
a[j]=a[j+1];
n--;//形成新的有序的序列
}
printf("%d\n",s);
return
0;
}
#include<stdio.h>
#include<stdlib.h>
int a[10],n;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int
i,s=0,j,x;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),cmp);//先对果子堆进行排序
while(1)
{
if(n==1)
break;
a[1]+=a[0];
x=a[1];
s+=a[1];//记录所需要的体力
i=2;
while(a[1]>a[i]&&i<n)
i++;
for(j=2;j<i;j++)//比新形成的果子堆小的依次前移两位
a[j-2]=a[j];
a[j-2]=x;//插入新的果子堆
for (j=j-1;j<n;j++)//比他大的依次前移一位
a[j]=a[j+1];
n--;//形成新的有序的序列
}
printf("%d\n",s);
return
0;
}
相关文章推荐
- VS 2008 hot-fix终于出来了
- VS 2008 hot-fix终于出来了
- Noip2004T2 合并果子
- 【NOIP合并果子】uva 10954 add all【贪心】——yhx
- [NOIP2004] 合并果子-解题报告
- NOIP2014普级组第二题&nbsp;比例简化
- 合并果子(NOIP2004)提高组
- NOIP2014普级组第二题&nbsp;比例简化
- NOIP提高组2004 合并果子题解
- 合并果子(NOIP2004)
- 文件切割合并器6.0&nbsp;下载和使用视频…
- NOIP2011复赛普级组&nbsp;数字反转
- noip2004合并果子
- DATATABLE 合并
- 终于收齐了&nbsp;汽车商标
- 【双队列】【NOIP2004提高组】二、合并果子
- noip2004 合并果子 (贪心+小根堆)
- NOIp2004 合并果子
- NOIP2011复赛普级组&nbsp;数字反转
- NOIP200406合并果子