| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 5028 | Accepted: 2753 |
Description
At each step of the game,the player choose a pile,remove at least one stones,then freely move stones from this pile to any other pile that still has stones.
For example:n=4 and the piles have (3,1,4,2) stones.If the player chose the first pile and remove one.Then it can reach the follow states.
2 1 4 2
1 2 4 2(move one stone to Pile 2)
1 1 5 2(move one stone to Pile 3)
1 1 4 3(move one stone to Pile 4)
0 2 5 2(move one stone to Pile 2 and another one to Pile 3)
0 2 4 3(move one stone to Pile 2 and another one to Pile 4)
0 1 5 3(move one stone to Pile 3 and another one to Pile 4)
0 3 4 2(move two stones to Pile 2)
0 1 6 2(move two stones to Pile 3)
0 1 4 4(move two stones to Pile 4)
Alice always moves first. Suppose that both Alice and Bob do their best in the game.
You are to write a program to determine who will finally win the game.
Input
The last test case is followed by one zero.
Output
Sample Input
3 2 1 3 2 1 1 0
Sample Output
1 0
Source
此博客一语道破天机
http://www.cnblogs.com/rainydays/archive/2011/07/09/2101918.html
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)
#define eps 1e-8
typedef __int64 ll;
using namespace std;
#define N 15
int a[N];
int main()
{
int i,j,n;
while(scanf("%d",&n),n)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
if(i&1)
{
printf("1\n");
continue;
}
sort(a,a+n);
for(i=0;i<n;i+=2)
if(a[i]!=a[i+1])
{
printf("1\n");
break;
}
if(i>=n)
printf("0\n");
}
return 0;
}
2385



被折叠的 条评论
为什么被折叠?



