codeforce 304 B. Soldier and Badges

第一次打cf,感觉挺爽的,页面看着很爽,大概是因为这次的比较简单吧,这道题有点像FZU的最小花费。。

就是移动的时候不必直接移动,可以相邻的移动。我刚开始写的数组开小了,被hack了。。。

思路:

先对这串数字排序,然后按开始遍历,如果同一个数字有好多,就往后面扩展就可以了,比如

1 1 4 4 5 就可以变成1 2 4 5 6 变成相邻的最小的数,记录一下增加多少就ok了。

代码:

<span style="font-family:Courier New;font-size:18px;">#include<stdio.h>#include<stdlib.h>#include<string.h>int a[300005],b[300005];int cmp(const void *a,const void *b){return *(int *)a-*(int *)b;}int main(){int n,i,j,sum;while(scanf("%d",&n)!=EOF){sum=0;memset(b,0,sizeof(b));for(i=0;i<n;i++)scanf("%d",&a[i]);qsort(a,n,sizeof(a[0]),cmp);for(i=0;i<n;i++){if(b[a[i]]==0)b[a[i]]=1;else{for(j=a[i]+1;j<=2*n;j++){if(b[j]==0){sum+=j-a[i];b[j]=1;break;}}}}printf("%d\n",sum);}return 0;} </span>这是看的别人的过程,,这个方法比我的好多了<span style="font-family:Courier New;font-size:18px;">初始化last=-1,res=0for(i=0;i<n;i++)if(a[i]>last)last = a[i];elseres+=++last-a[i];</span>

如果有可能,我带你去远行。躺在德德玛的草原,

codeforce 304 B. Soldier and Badges

相关文章:

你感兴趣的文章:

标签云: