题目大意:两个人玩拔旗游戏,给出n堆旗子,每个人都可以操作这些旗子,但是每个人每次操作都必须拔掉一个旗子,然后也可以把这堆里的其他旗子分配给别的堆,当某一堆旗子已经被拔光了,就不可以再往里面放旗子了。当某个人没法对旗子进行操作时,这个人就输了。判断一下先手能赢吗?
解题思路:如果只有一堆旗子的话,第一个操作的人就可以将旗子拔光,这样第二个人就没法对旗子进行操作了,就一定会是先手必胜。
如果是两堆旗子一样高度的话,第一个人不论做什么操作,第二个人都可以仿造第一个人的操作,到了最后一定会产生旗子两堆旗子都为空的状况,这个时候,第一个人先在这种情况下进行操作,自然就输了,所以说这个是一个必败点。
接下来的三堆以上的情况,第一个人都可以将最高的那一堆先操作,补全不成对的旗子,制造出成对的旗子(两个相同高度的旗子为一对)。这样就找出了后手的必败点,先手就必胜。
除非一开始就给出了成对的旗子,这样第一个人就一定会输。
#include<stdio.h>
#include<algorithm>
using namespace std;
const int N = 10;
int s[N], n;
int main () {
while (scanf ("%d", &n), n) {
int i;
for (i = 0; i < n; i++)
scanf ("%d", &s[i]);
if (n % 2)
printf ("Win\n");
else {
sort (s, s + n);
for (i = 0; i < n; i = i + 2)
if (s[i] != s[i + 1])
break;
if (i == n)
printf ("Lose\n");
else
printf("Win\n");
}
}
return 0;
}