AcWing 3426. 考研_糖果分享游戏(上机模拟题)
原题链接
简单
作者:
bobo0612
,
2023-03-28 11:19:54
,
所有人可见
,
阅读 121
老师吹起哨声,所有学生同时拿出自己一半数量的糖果,递给右边相邻的同学。
- 也就是说, 每次循环, 如果不满足所有学生糖果相等的条件, 那么更新学生 i 的糖果数量
w[i] = q[i] / 2 + q[i - 1] / 2
传递完成后,所有拥有奇数数量糖果的同学都将再得到一颗糖果。
- 奇数
q[i] = w[i] + 1;
- 偶数
q[i] = w[i];
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int q[N]; // 糖果的数量
int w[N]; // 进行交换的辅助数组
int main()
{
while (cin >> n && n)
{
for (int i = 0; i < n; i ++) cin >> q[i];
int cnt = 0; // 记录循环次数
while (1)
{
// 判断所有人是否相等 只要判断是否和q[0]相等就可以
bool is_same = true;
for (int i = 0; i < n; i ++)
if (q[i] != q[0])
is_same = false;
if (is_same) break;
cnt ++;
// 特殊处理0号同学的左边n-1号同学
for (int i = 0; i < n; i ++)
w[i] = (q[i] + q[(i - 1 + n) % n]) / 2;
for (int i = 0; i < n; i ++)
{
if(w[i] % 2) q[i] = w[i] + 1;
else q[i] = w[i];
}
}
cout << cnt << " " << q[0] << endl;
}
return 0;
}