标签:
题意: n堆 ,每堆 ai 个,至少取走一颗, 取光所有的获胜; Alice先取
结论: a1 XOR a2 XOR a3 ....... XOR an = 0 :必败态 <-----假设两个相同: a1 XOR a2 = 0
a1 XOR a2 XOR a3 ....... XOR an != 0 :必胜态
证明: 若 异或 为0 的状态任意取 异或结果肯定不为0 ----> 必败转到必胜
10001: 10001 10001
01110:----> 00110 ----> 00110
11111: 11111 10111
-------------------------------------------
XOR: 00000 01000 00000
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<vector> 5 #include<algorithm> 6 using namespace std; 7 typedef long long ll; 8 9 int main(){ 10 11 // cout << (17 ^ 14 ^ 31) << endl; 12 // cout << (17 ^ 6 ^ 31) << endl; 13 // cout << (17 ^ 6 ^ 23) << endl; 14 15 int n,tmp,x = 0; 16 scanf("%d",&n); 17 for(int i = 0 ; i < n ; i ++){ 18 scanf("%d",&tmp); 19 x ^= tmp; 20 } 21 if(x) puts("Alice"); 22 else puts("Bob"); 23 return 0; 24 }
标签:
原文地址:http://www.cnblogs.com/zstu-jack/p/5403917.html