看书看到博弈的部分了,然后就做一下这题。我们可以把因数个数看成石子,于是这题就变成了一个常规的Nim游戏了。
博弈好像挺好玩的,Bouton定理的证明也基本看懂,有空切一下博弈玩玩好像听不错的样子。
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 #include2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 11111; 9 int pcnt[N];10 11 void PRE() {12 for (int i = 2; i < N; i++) {13 if (pcnt[i]) continue;14 int t = i;15 while (t < N) {16 for (int j = t; j < N; j += t) {17 pcnt[j]++;18 }19 t *= i;20 }21 }22 }23 24 int main() {25 int n, m, x, T;26 PRE();27 scanf("%d", &T);28 for (int cas = 1; cas <= T; cas++) {29 scanf("%d%d", &n, &m);30 int ans = 0;31 for (int i = 0; i < n; i++) {32 int rsum = 0;33 for (int j = 0; j < m; j++) {34 scanf("%d", &x);35 rsum += pcnt[x];36 }37 ans ^= rsum;38 //cout << rsum << endl;39 }40 printf("Case #%d: ", cas);41 if (ans) puts("YES");42 else puts("NO");43 }44 return 0;45 }
——written by Lyon