Candy Sharing Game
题目链接
题目大意
就是说有n个小同学,每个同学手里有一定数量的糖果,现在按逆时针站成一个环,老师每次吹哨时,每个小朋友会把手里的糖果分一半给右边的小朋友,如果分完他手里是奇数个糖果,他会从老师那里又得到一个糖果,问现在需要吹几轮哨,和最终每个小朋友手里的糖果数。
题解
本来以为可以推出个什么神奇的数学公式,结果模拟就过了…
代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[2][1000005],p,cnt,ans,n;
bool check(int k)
{
for (int i=1;i<n;i++) if (a[k][i]!=a[k][0]) return 0;
return 1;
}
void solve(int k)
{
for (int i=1;i<=n;i++)
{
a[k%2][i%n]=a[(k+1)%2][i%n]/2+a[(k+1)%2][(i-1)%n]/2;
if (a[k%2][i%n]%2)
{
a[k%2][i%n]++;
ans++;
}
}
}
int main()
{
while(scanf("%d",&n),n!=0)
{
memset(a,0,sizeof(a));
cnt=0; p=0;
for (int i=0;i<n;i++) scanf("%d",&a[0][i]);
while (!check(p%2))
{
solve(++p);
cnt++;
}
printf("%d %d\n",cnt,a[p%2][0]);
}
return 0;
}