Crazy Calendar LightOJ - 1393 博弈论,阶梯博弈

此题题目只看最后一段即可。
题目意思是可以将一个堆的任意石子移动到右端或者下端。

  • 可以发现最后所有的石子最终都汇入右下角的那一格当中。可以得出是阶梯博弈,定义右下角的格子为0号点,与0号点的曼哈顿距离( ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ |x_1-x_2|+|y_1-y_2| x1x2+y1y2)为奇数的是奇数堆,偶数的是偶数堆。
  • 最终答案将奇数堆的进行异或即可。
#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;
}

猜你喜欢

转载自blog.csdn.net/bloom_er/article/details/113775700