Incredible Chess:
题意:在一张棋盘上有m个白色棋子和黑色棋子,他们只能向前移动或向后移动,谁不能移动时谁输
如标题所言,这是一个Nim游戏,我们就将他放到石子那个模型来讲吧。将每一列的棋子间距看作石子数,向前走(向对方走)是就是在不断的取石子,当两者相邻时,则剩下的走法已经固定(敌退我进),什么?你说他们还会背对对面走?不过背向走是木大的,你跑开,我追过来不就好了(括弧笑),所以如果对方在该时是必胜的,你跑开他就追相同的步数,又回到必胜局面,若果你是必胜局面,不会真有人拉开距离吧?不会吧不会吧,你拉开距离后可能就轮到你输了,聪明的你应该不会这样做的吧。所以当两方全部相邻后第一次移动方必输。
AC代码
#include<cstdio>
using namespace std;
int arr1[110], arr2[110],arr[110];
int main() {
int t;
scanf("%d", &t);
for (int k = 1; k <= t; k++) {
int n, ans = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &arr1[i]);
for (int i = 1; i <= n; i++) scanf("%d", &arr2[i]);
for (int i = 1; i <= n; i++) {
arr[i] = arr2[i] - arr1[i] - 1;
}
for (int i = 1; i <= n; i++) {
ans ^= arr[i];
}
if (ans!=0) {
printf("Case %d: white wins\n", k);
}
else {
printf("Case %d: black wins\n", k);
}
}
}
Left Right
题意:在一条直线上,白球和黑球交替出现,数量相等,白球只能向右移动,黑球只能向左移动,且不能跳过球,获胜条件是对方不能移动。
这题显然是Nim博弈,两者间距就是每组石子的数量暴露了本蒟蒻只会石子游戏
Matrix Game
题意:在一个n*m的表格上,每个格子上有一定数量的石子,每次可以取任意一行中的任意格子上的任意数量石子,所以我们可以把一行的石子数看做原始石子游戏中的一堆石子数量又回到了石子游戏