c语言竞赛成绩排序,吧内编程竞赛:成绩公布
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
第二第三題太狡猾了
第二題居然有重復的路……怪不得只通過30%……
第三題居然可以只吃一部分(一直以為要吃完,題目看上去也是這樣)
第一題
因為輸入的數極差不大,可以用數組(大小為?(極差+1))存放
#include
int?a[201];
int?main(){int?w,n,s=0,t;scanf("%d%d",&w,&n);
for(int?i=n;i--;)scanf("%d",&t),++a[t];
for(int?l=0,h=200;n>0;){while(!a[h])--h;
while(!a[l])++l;if(l+h<=w){if(l!=h){if(a[l]
a[h]-=a[l],s+=a[l],n-=a[l]+a[l],a[l]=0;
else?a[l]-=a[h],s+=a[h],n-=a[h]+a[h],a[h]=0;
}else?n-=a[h],s+=(a[h]+1)>>1,a[h]=0;
}else?n-=a[h],s+=a[h],a[h]=0;}printf("%d\n",s);}
第三題
居然可以不吃那么多(題目看了幾遍,看得不清楚,或者是我理解能力太差。
最后一遍以為理解了,就是要吃所規定數量的食物)
設a[i]是第1天到第i天最多可以吃的天數
顯然,(第一次只吃1,第二次吃2……第a[i]次吃a[i])是最優解(雖然不一定是唯一最優解)
考察a[i+1],如果這天可以吃的食物數大于a[i](上次吃的食物數),則
a[i+1]?=?a[i]?+?1,否則a[i+1]?=?a[i]
#include?
int?main()
{
int?n,?size?=?0,?t;
for?(scanf("%d",?&n);?n--;?)
{scanf("%d",?&t);
if?(t?>?size)?++size;
}printf("%d\n",?size);}
總結
以上是生活随笔為你收集整理的c语言竞赛成绩排序,吧内编程竞赛:成绩公布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断文件是否改变php,PHP判断文件是
- 下一篇: 支持多达70余种嵌入式核心的嵌入式仿真软