poj 1740
博弈,首先讨论石头堆两堆两堆相等的情况,例如x,x,y,y,z,z.6堆的情况.
在这种情况下先取的必输,很简单,先取的那人怎么取后取的那人就怎么取(如 果对方把石头分配到一堆上,你就分配到与之对应的堆上),
总之保持这个相等的均势不变,这样到最后,后取的人就将取走最后一堆石头.
代码:
#include<iostream> #include<fstream> using namespace std; int a[11]; int cmp(const void *a,const void *b){ return *((int *)a)-*((int *)b); } void read(){ ifstream cin("in.txt"); int i,j,k; int n; while(1){ cin>>n; if(n==0) return; for(i=1;i<=n;i++) cin>>a[i]; if(n%2==0) { qsort(a+1,n,sizeof(int),cmp); for(i=1;i<=n;i+=2) if(a[i]!=a[i+1]) break; if(i<=n) cout<<1<<endl; else cout<<0<<endl; } else cout<<1<<endl; } } int main(){ read(); return 0; }