Nim博弈问题,因为Nim博弈第一步要转化至必败态
设 s=a1 ^ a2 ^ a3 ^ a4 ^ ...... an,那么只需要把 ak 换为 ak^s 即可,当然 前者必须要大
因为 s=a1 ^ a2 ^ a3 ^ a4 ^ ak ^ s ^ .......an=a1^a2^a3^......an ^ s = s^s=0; 所以转为了必败态
code:
#include <map> #include <cstring> #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int a[101]; int main() { int t,temp,sum; while(~scanf("%d",&t)&&t) { sum=temp=0; for(int i=1;i<=t;i++) { scanf(" %d",&a[i]); temp=temp^a[i]; } for(int i=1;i<=t;i++) { if(a[i]>(temp^a[i])) sum++; } printf("%d\n",sum); } return 0; }