ZOJ 1814/HDU 1034/POJ 1666 Candy Sharing Game

来源:互联网 发布:西安交大管晓宏 知乎 编辑:程序博客网 时间:2024/04/30 12:41

题目链接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1814

http://acm.hdu.edu.cn/showproblem.php?pid=1034

http://poj.org/problem?id=1666

题意:

 题目说的是一个分糖果的游戏,n个学生围成一圈,每个人手上有a[i]个糖果,每一轮游戏开始时,学生手中的糖果都是偶数,他们都把自己手中一半的糖果分给他右边的同学。分完后手中糖果数是奇数的,老师会给他一颗糖果。如果所有人手中的糖果数都一样 游戏结束。

    输出总共进行了多少轮游戏 还有最后学生手中的糖果数。

注意:给别人糖果的一半不包括老师给的那颗凑偶数的,,,,就这么把我卡了好久。。

代码:

#include<iostream>#include<cstdio>using namespace std;int main(){    int a[105];    int n;    while(scanf("%d",&n) && n!=0)    {        int count=0;        for(int i=0;i<n;i++)            scanf("%d",&a[i]);            int maxx,minn;            maxx=minn=a[0];        for(int i=1;i<n;i++)           {               maxx=max(maxx,a[i]);               minn=min(minn,a[i]);           }        if(maxx==minn)            printf("0 %d\n",maxx);        else        {          cc:              int t=a[0]/2;              for(int i=1;i<n;i++)            {                 int p=a[i]/2;                 a[i]=a[i]/2+t;                 t=p;                 if(a[i]%2)                    a[i]++;            }            a[0]=a[0]/2+t;            if(a[0]%2)                a[0]++;            count++;            for(int j=1;j<n;j++)                if(a[0]!=a[j])                     goto cc;            printf("%d %d\n",count,a[0]);        }    }    return 0;}


0 0
原创粉丝点击