poj解题报告——1740

来源:互联网 发布:淘宝针织衫热词 编辑:程序博客网 时间:2024/06/05 04:00

还是一道博弈论的题目

题意:对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。最后谁无子可取即输。

分析:首先考虑两堆相等的情况,一定是谁取谁输,因为对方永远可以做对称的操作。对于四堆,1、2堆相等,3、4堆相等的情况,一定也是先手输,后手也只需要做对称的操作(在先手取石子的对称堆中取相同多的石子,并把和先手等量的石子分给先手分配给的堆的对称堆。(若先手在3堆取,并分给1堆,那后手就在4堆取,分给2堆)。也就是说对于任意的一对一对相等的情况来说,一定是后手必胜。

#include<stdio.h>#include<string.h>int main(){int n,num[120],x,flag;int i,j,k;while(scanf("%d",&n)&&n){memset(num,0,sizeof(num));for(i=0;i<n;++i){scanf("%d",&x);num[x]++;}flag=0;for(i=1;i<101;i++){if(num[i]&1){flag=1;break;}}printf("%d\n",flag);}return 0;}


0 0