poj 1740 A New Stone Game(博弈)

来源:互联网 发布:三维模型矩阵旋转源码 编辑:程序博客网 时间:2024/05/17 03:22

poj 1740 A New Stone Game


题目大意:两个人玩拔旗游戏,给出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");elseprintf("Win\n");}}return 0;}


0 0
原创粉丝点击