codeoforces 975B Mancala
题意:
一个游戏,有14个洞,每个洞中开始有若干个球或者没有球。
每一步的操作,是将一个洞中的所有球取出,再逆时针放一个球到它的后一个洞,后两个洞,后三个洞。。。。如果当前放的是最后一个,那么下一个又是第一个,即是可循环的。
一步操作之后的的分数是所有的有偶数个球的洞的球的个数的总和。
问一步操作之后最多可以得到多少分。
思路:
模拟。注意会爆int。
代码:
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int N = 14; long long a[N],b[N]; int main() { for (int i = 0;i < N;i++) { scanf("%lld",&a[i]); } long long ans = 0; for (int i = 0;i < N;i++) { for (int j = 0;j < N;j++) b[j] = a[j]; b[i] = 0; int x = a[i] / N,y = a[i] % N; for (int j = 0;j < N;j++) b[j] += x; for (int j = 1;j <= y;j++) b[(j+i) % N] += 1; long long tmp = 0; for (int j = 0;j < N;j++) if(b[j] % 2 == 0)tmp += b[j]; ans = max(ans,tmp); } printf("%lld\n",ans); return 0; }
康复训练中~欢迎交流!