uvalive(NIM博弈)

来源:互联网 发布:js回调函数原理 编辑:程序博客网 时间:2024/06/07 21:26

题意:

给出有n堆石子;然后每次选一堆,取不能超过一半;谁不能取了,谁就输了;


思路:

标准NIM博弈题;不过还是ai 太大,我们不能求出所有sg值;

所以先求小部分sg值;然后找规律;

观察得出;sg(n) = n % 2 == 0 ? n/2 : sg(n/2);


#include<cstdio>#include<cstring>#define ll long longll SG(ll x){return x % 2 == 0 ? x / 2 : SG(x / 2);}int main() {int t;scanf("%d", &t);while(t--) {ll sum = 0;ll tmp;int n;scanf("%d", &n);for(int i = 0; i < n; i++) {scanf("%lld", &tmp);sum ^= SG(tmp);}if(sum)printf("YES\n");elseprintf("NO\n");}return 0;}


0 0