您的位置:首页 > 其它

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: