P2197 【模板】nim游戏
博弈初心者。。。
学习地址luogu上可以找到。关于比较好的证明地址放在了地址页里了。这里不再赘述。
大概感觉还是所谓先手必胜就是面对当前局面一定可以采取一种策略,然后后手无论再怎么做,先手都可以“控制”住局面的稳态,使得后手打乱的状态恢复回来,随着集合可操作物品(石子)减少从而使自己获胜。而这种采取一种策略使得后手无论怎么做都负(所谓先手必负)的情况就是所谓的必胜。感觉很迷啊,只能感性理解了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #define dbg(x) cerr << #x << " = " << x <<endl 7 using namespace std; 8 typedef long long ll; 9 typedef double db; 10 typedef pair<int,int> pii; 11 template<typename T>inline T _min(T A,T B){return A<B?A:B;} 12 template<typename T>inline T _max(T A,T B){return A>B?A:B;} 13 template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,1):0;} 14 template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,1):0;} 15 template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;} 16 template<typename T>inline T read(T&x){ 17 x=0;int f=0;char c;while(!isdigit(c=getchar()))if(c=='-')f=1; 18 while(isdigit(c))x=x*10+(c&15),c=getchar();return f?x=-x:x; 19 } 20 int T,n,x,sum; 21 int main(){//freopen("test.in","r",stdin);//freopen("test.out","w",stdout); 22 read(T);while(sum=0,T--){ 23 read(n);for(register int i=1;i<=n;++i)sum^=read(x); 24 puts(sum?"Yes":"No"); 25 } 26 return 0; 27 }