New Stone Game

题目大意

题意

分析

考虑到每个玩家第一次移除石头时,必须将所选石堆的石子完全移除

那么前两手必定是在对角线

分析

且最终决定胜负前一手状态一定是如图 1.21.2 所示

那么问题就是考虑一个 NIMNIM 游戏, 对除前两轮选取的数之外的数进行 XORXOR

如果不在所选两个数的对角线,xorxor 本身,其余 xorxor 本身 - 1

NIM_SUM 为 1 , 先手必胜,否则先手必败

那么可以枚举 AliceAlice 的位置,然后再枚举不和 AliceAlice 同行或同列 BobBob 的位置

再进行求 NIM_SUM,判断即可

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int a[3][3];
void solve(){
int cot = 0;
for(int i = 0;i < 3;i++) for(int j = 0;j < 3;j++) cin >> a[i][j];
int res = 0;
for(int i = 0;i < 3;i++)
for(int j = 0;j < 3;j++){
int f = 0;
for(int ii = 0;ii < 3;ii++){
for(int jj = 0;jj < 3;jj++){
int sum = 0;
if(ii == i || jj == j) continue;
for(int l = 0;l < 3;l++){
for(int r = 0;r < 3;r++){
if(l == i && r == j) continue;
if(l == ii && r == jj) continue;
if(l == i || l == ii || r == j || r== jj) {
sum ^= (a[l][r] - 1);
}
else sum ^= a[l][r];
}
}
if(!sum) f = 1;
}
}
if(!f) res++;
}
cout << res << endl;
}