题意:
给n堆石子,两人交替,选择一堆石头后先拿去任意颗,再把剩下的放到其他任意堆,最先拿完所有石子赢,问先手必胜还是必败。
分析;
解决此类问题的一种的思路是先构造策略,然后判断此策略能否满足1.必胜态可到必败态。2.必败态无法到必败态。
代码:
//poj 1740 //sep9 #include <iostream> #include <algorithm> using namespace std; const int maxN=128; int a[maxN]; int main() { int i,n,win; while(scanf("%d",&n)==1&&n){ win=0; for(i=0;i<n;++i) scanf("%d",&a[i]); sort(a,a+n); if(n%2==1) win=1; else{ for(i=0;i<n;i+=2) if(a[i]!=a[i+1]) win=1; } if(win==1) puts("1"); else puts("0"); } return 0; }
时间: 2024-11-03 22:02:36