HDOJ HDU 1034 Candy Sharing Game

来源:互联网 发布:node2vec 知乎 编辑:程序博客网 时间:2024/06/06 12:50

HDOJ 1034 Candy Sharing Game

题目

点此查看 HDOJ 1034 Candy Sharing Game

分类

模拟

题意

糖果分享游戏
规则如下
- 初始时 每个人都有一堆糖果 并 成圈站着
- 听到指令 同时 将一半的糖果给下一个人
- 每轮完成时 手中糖数 为 奇数时 会得到一颗糖
- 重复以上两步骤 直到 所有人 的 糖数一致
求游戏要进行多少轮 最终每人的糖数

题解

按题意模拟即可

技巧

这个题的难点在于 同时 将一半的糖果给下一个人
模拟时 将 最后一个人先减半 标记 之后 从第一个模拟 当前同学糖果数 简版记录 再加上 上一个的糖果数记录 即可

代码

#include <iostream>#define max 1000using namespace std;int cir[max];bool isequal(int n);int add(int n);int main(){    int n,t,lst,nxt;    while(cin >> n && n)    {        t = 0;        for(int i = 0;i < n;i++)        {            cin >> cir[i];        }        while(!isequal(n))        {            t++;//            cout << t << endl;//            for(int j = 0;j <n;j++)//                cin.get();            cir[n-1] /= 2;            lst = cir[n-1];            for(int i = 0;i < n-1;i++)            {                cir[i] /= 2;                nxt = cir[i];                cir[i] += lst;                lst = nxt;            }            cir[n-1] += lst;             add(n);        }        cout << t << " " << cir[0] << endl;    }    return 0;}bool isequal(int n){    int f = cir[0];    for(int i = 1;i < n;i++)        if(f != cir[i])            return false;    return true;}int add(int n){    for(int i = 0;i < n;i++)        if(cir[i] % 2 == 1)            cir[i]++;}