此题题目只看最后一段即可。
题目意思是可以将一个堆的任意石子移动到右端或者下端。
- 可以发现最后所有的石子最终都汇入右下角的那一格当中。可以得出是阶梯博弈,定义右下角的格子为0号点,与0号点的曼哈顿距离( ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ |x_1-x_2|+|y_1-y_2| ∣x1−x2∣+∣y1−y2∣)为奇数的是奇数堆,偶数的是偶数堆。
- 最终答案将奇数堆的进行异或即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[105];
int main() {
int T, cas = 0; scanf("%d", &T);
while (T--) {
int n, m; scanf("%d %d", &n, &m);
ll ans = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
int t; scanf("%d", &t);
if (((n + m) - (i + j)) % 2 == 1) ans ^= t;
}
}
printf("Case %d: ", ++cas);
if (ans) puts("win");
else puts("lose");
}
return 0;
}