做Good Bye 2014那个晚上做着练习的。
379A - New Year Candles:
这居然是协会十一时出的一道题,简单题不多说了。
1 2 3 4 5 6 7 8 9 10 11 12
| #include<cstdio> int main(){ int a,b,left,cnt; while(scanf("%d%d",&a,&b)!=EOF){ cnt=0; for(left=a;left>=b;left-=b-1){ cnt+=b; } cnt+=left; printf("%d\n",cnt); } }
|
379B - New Year Present:
输入钱包个数,和每个钱包需要放的硬币个数,指挥机器人放硬币,不能在同一个地方连续放,输出操作方法。
因为没有说是最少步数,只是限制在10^6以下,所以从左往右放直到放满所有。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include<cstdio> #include<cstring> const int maxn=310; int a[maxn],cur,flag,sum,n; void put_coin(){ if(a[cur]&&!flag){ flag=1,--a[cur],--sum; putchar('P'); } else if(a[cur]){ if(cur!=n-1){ putchar('R'); if(a[cur+1]){ --a[cur+1],--sum; putchar('P'); } --a[cur],--sum; putchar('L'); putchar('P'); } else{ putchar('L'); putchar('R'); putchar('P'); --a[cur],--sum; } } else if(cur!=n-1){ flag=0,++cur; putchar('R'); } else{ flag=0,--cur; putchar('L'); } if(sum) put_coin(); } int main(){ while(scanf("%d",&n)!=EOF){ cur=flag=sum=0; memset(a,0,sizeof(a)); for(int i=0;i<n;++i){ scanf("%d",&a[i]); sum+=a[i]; } put_coin(); putchar('\n'); } return 0; }
|
379C - New Year Ratings Change:
输入人数和每个人当前的rating,求变动后rating,要求不能有人rating相同。
一开始超时了好多次,Ac的这次764ms,也不是很理想。
排序以后为每个人的rating赋值,赋他当前的rating或者之前rating的最大值+1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=300010; struct rating{ int res,num,rate; rating(int res=0,int num=0):res(res),num(num),rate(0){} }; rating a[maxn]; bool cmp1(rating a,rating b){ return a.res<b.res; } bool cmp2(rating a,rating b){ return a.num<b.num; } int main(){ int n; while(scanf("%d",&n)!=EOF){ memset(a,0,sizeof(a)); for(int i=0;i<n;i++){ int k; scanf("%d",&k); a[i]=rating(k,i); } sort(a,a+n,cmp1); int last=0; for(int i=0;i<n;i++){ if(last>=a[i].res){ a[i].rate=last; ++last; } else{ a[i].rate=a[i].res; last=a[i].res+1; } } sort(a,a+n,cmp2); for(int i=0;i<n;i++){ if(i) printf(" "); printf("%d",a[i].rate); } printf("\n"); } return 0; }
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **