POJ2975 Nim 博弈論 尼姆博弈
阿新 • • 發佈:2017-12-18
gif pen 分享圖片 can play include -c org one
http://poj.org/problem?id=2975
題目始終是ac的最大阻礙。
問只取一堆有多少方案可以使當前局面為先手必敗。
顯然由尼姆博弈的性質可以知道需要取石子使所有堆石子數異或和為0,那麽將某一堆a個石子變為a^異或和即可。
a1^a2^a3^...^an=y;
a1^a2^a3^...^an^y=0;
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #include<map> 7View Codeusing namespace std; 8 int m; 9 int a[1010]={}; 10 int main(){ 11 while(~scanf("%d",&m)){ 12 if(m==0)break; 13 int x,z=0,y=0; 14 for(int i=1;i<=m;i++){ 15 scanf("%d",&x); 16 y^=x; 17 a[i]=x; 18 } 19 if(y){ 20 for(int i=1;i<=m;i++){ 21 if((y^a[i])<a[i]){ 22 z++; 23 } 24 } 25 printf("%d\n",z); 26 } 27 else{ 28 printf("%d\n",0); 29 } 30 } 31 return 0; 32 }
POJ2975 Nim 博弈論 尼姆博弈