规则: 有若干堆石子,每次从某一堆中取出任意个,全部取完胜
结论: 若石子数异或为0,则先手必败,否则必胜
证明:
用(
a
1
,
a
2
.
.
.
a
n
a_1,a_2...a_n
a1,a2...an)表示局势
若异或和不为0,设a1 ^ a2 ^ …^ an = k;那么就意味着:a1 ~ an中,k的二进制对应的1的位数总数为奇数。那么在a1~an中,一定存在一个数ai,它含有k的二进制表示的最高位,那么ai^k < ai,所以我们只要将ai取为ai ^ k即可,这样a1 ^ a2 ^ … ^ an =0;
那么对于它们的二进制数,任意一位上的1的个数总和一定是偶数个,由于只能在一堆中取,所以取完异或和一定不为0(先手取完),根据上面的策略,下一次取一定能使得异或和为0(后手取)。以此循环下去,由于总数一直在下降,所以一定是由后手取完石子,先手必败。
/*
有若干堆石子,每次从某一堆中取出任意个,全部取完胜
若石子数异或为0,则先手必败,否则必胜
*/
#include <cstdio>
int main()
{
int n,ans = 0;
scanf("%d",&n);
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d",&x);
ans ^= x;
}
if( ans == 0 ) printf("second win\n");
else printf("first win\n");
return 0;
}