原题链接:http://lx.lanqiao.cn/PRoblem.page?gpid=T124
题意有点坑爹。题目说孩子们围成一圈,然后把自己的糖果分一半给左边的小朋友。如果所有人同时进行的话,将无法进行操作。对于某一个具体的人来说,他分给左边小朋友糖果的数量,是他原来的一半还是他右边的小朋友给了他之后的一半,这很纠结。。。
经过一段时间的解读后,是第一种解释。样例如下:
22 4
(1) 23 3
+1+1
(1) 34 3
+1+1
括号里的数为第一个小朋友分给左边小朋友的糖果数量。
接下来就是模拟了:
AC代码:
#include <iostream>using namespace std;const int maxn=1000+5;int a[maxn];int n;bool OK(){ for(int i=1; i<n; i++) { if(a[i]!=a[i-1]) return false; } return true;}int main(){ while(cin>>n) { for(int i=0; i<n; i++) { cin>>a[i]; } int sum=0; while(!OK()) { int t=a[0]/2; a[0]/=2; for(int i=0; i<n-1; i++) { a[i+1]/=2; a[i]+=a[i+1]; } a[n-1]+=t; for(int i=0; i<n; i++) { //cout<<a[i]<<" "; if(a[i]&1) { sum++; a[i]++; } } //cout<<endl; } cout<<sum<<endl; } return 0;}
新闻热点
疑难解答