链接
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2992
题解
设大小为
1
1
1的堆有
a
a
a个,大小大于
1
1
1的堆有
b
b
b个
当
a
a
a为奇数时:
对于每个大于
1
1
1的堆,先手取得它还剩一个物品,后手就必须取剩下的那一个
这样等所以大于
1
1
1的堆消耗完了,就只能每人取一个大小为
1
1
1的堆,这样先手必胜
当
a
a
a为偶数时:
如果
b
b
b等于
0
0
0,那么取物品的策略时唯一的,先手必败
如果
b
b
b为
1
1
1,先手可以先整堆取走这堆大的,然后另一个人就面临必败态,因此先手可以必胜
如果
b
b
b大于
1
1
1,先手可以先把那些大堆每次取得只剩下一个,直到
b
=
1
b=1
b=1的情况出现,这样也是先手必胜
代码
#include <bits/stdc++.h>
#define maxn 2019
#define cl(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;
ll read(ll x=0)
{
ll c, f=1;
for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
for(;isdigit(c);c=getchar())x=x*10+c-48;
return f*x;
}
int main()
{
ll T, N, a, b;
T = read();
while(T--)
{
a = b = 0;
N = read();
while(N--)
if(read()==1)a++;
else b++;
if(a&1)
{
printf("poopi\n");
}
else
{
if(b)printf("poopi\n");
else printf("piloop\n");
}
}
return 0;
}