博弈论入门题 kiki's game

Problem Description

Recently kiki has nothing to do. While she is bored, an idea appears in his mind, she just playes the checkerboard game.The size of the chesserboard is n*m.First of all, a coin is placed in the top right corner(1,m). Each time one people can move the coin into the left, the underneath or the left-underneath blank space.The person who can‘t make a move will lose the game. kiki plays it with ZZ.The game always starts with kiki. If both play perfectly, who will win the game?

Input

Input contains multiple test cases. Each line contains two integer n, m (0<n,m<=2000). The input is terminated when n=0 and m=0.

Output

If kiki wins the game printf "Wonderful!", else "What a pity!".

Sample Input

5 3
5 4
6 6
0 0

Sample Output

What a pity!
Wonderful!
Wonderful!

Author

月野兔

Source

HDU 2007-11 Programming Contest

Recommend

威士忌   |   We have carefully selected several similar problems for you:  1846 1847 1848 1849 1517

显然(1,1)是必败态,因为没有操作可以选择

那么由必胜态的定义(一步之内能走到必败态的状态叫必胜态)(1,2),(2,2),(2,1)都是必胜态

依次类推可以打一个表出来(必败态:下一步无论怎样转移都会转移到必胜态)

找规律

n,m都是奇数的时候会输!

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<deque>
#include<iomanip>
#include<vector>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<functional>
#include<fstream>
#include<memory>
#include<list>
#include<string>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;

#define N 100
#define MAXN 20000 + 9
#define INF 1000000009
#define eps 0.00000001
#define sf(a) scanf("%d",&a)

int n;
int a[N];
int main()
{
    while (sf(n), n)
    {
        int sum = 0;
        for (int i = 0; i < n; i++)
            sf(a[i]), sum ^= a[i];
        if (sum == 0)
            cout << 0 << endl;
        else
        {
            int ans = 0;
            for (int i = 0; i < n; i++)
            {
                if ((sum^a[i]) < a[i])
                    ans++;
            }
            cout << ans << endl;
        }
    }
}

博弈论入门题 kiki's game

时间: 2024-10-13 11:40:47

博弈论入门题 kiki's game的相关文章

POJ - 2348 Euclid&#39;s Game(博弈论入门题)

题目链接:poj.org/problem?id=2348 题意:给出两个数,两个人进行博弈,每个人都采取最优策略. 每个人可以进行操作:两个数中较大数减去较小数的倍数(可以是1,2...X倍),使得其中一个数先为零的获胜. 每次都先把较小值给a,较大值给b.一开始把必胜态给先手的那个人,然后进行判断. 1.b-a<=a  没办法只能一次一次计算,必胜态不断变换,直到其中一个数刚好为0. 2.b-a>a   不管怎样都是必胜态.b - xa <= a如果这个是必败态,那么b - (x-1)

硬币游戏1(博弈论入门题)

题目链接:挑战程序设计竞赛p305 题意:一开始有X枚硬币,有K种取法,a[1],a[2]......a[k],取走最后一枚硬币为胜利者,两个人取硬币,都以最优策略取硬币,Alice先取,问最终谁是胜利者. 动态规划的思想(轮到Alice取硬币): 1.剩下0枚硬币,Alice为必败态. 2.剩下i枚硬币,存在一种情况 i - a[ j ] 为必败态,Alice为必胜态. 3.剩下i枚硬币,任何情况 i - a[ j ] 为必胜态,Alice为必败态. 1 void solve() 2 { 3

hdu 2767 Proving Equivalences(强连通入门题)

1 /************************************************* 2 Proving Equivalences(hdu 2767) 3 强连通入门题 4 给个有向图,求至少加多少条边使得图是所有点都是强连通的 5 由a->b->c->a易知n个点至少要n条边,每个出度和入度都要大 6 于1.先求所有所有强连通分量,把每个强连通分量看成一个点 7 在找每个点的出度和入度,最后还差的出度和入度的最大值就是 8 答案. 9 10 ************

hdu 5001 walk 概率dp入门题

Description I used to think I could be anything, but now I know that I couldn't do anything. So I started traveling. The nation looks like a connected bidirectional graph, and I am randomly walking on it. It means when I am at node i, I will travel t

hdu1796:容斥入门题

简单的容斥入门题.. 容斥基本的公式早就知道了,但是一直不会写. 下午看到艾神在群里说的“会枚举二进制数就会容斥”,后来发现还真是这样.. 然后直接贴代码了 #include <iostream> #include <stdio.h> #include<string.h> #include<algorithm> #include<string> #include<ctype.h> using namespace std; long l

hdu1695 GCD(莫比乌斯入门题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意: 给出n.m.k ,求出1<=x<=n, 1<=y<=m 且gcd(x,y) == k 的(x,y)的对数 解析: 显然就是求 [1,n/k] 与 [1, m/k]有多少数对的最大公约数是1 莫比乌斯入门题 我们设 为满足且和的的对数 为满足且和的的对数 那么,很显然,反演后得到 我们所需要的答案便是  f(1) = ∑i=1μ(i)*(n/i)*(m/i)  ,求解这个式

网络流最经典的入门题 各种网络算法都能AC。

Drainage Ditches 题目抽象:给你m条边u,v,c.   n个定点,源点1,汇点n.求最大流.  最好的入门题,各种算法都可以拿来练习 (1):  一般增广路算法  ford() 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <string&g

hdu 1754:I Hate It(线段树,入门题,RMQ问题)

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33726    Accepted Submission(s): 13266 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求

(博弈 sg入门)kiki&#39;s game -- hdu -- 2147

链接: http://acm.hdu.edu.cn/showproblem.php?pid=2147 题意: 在一个n*m的棋盘上,从  (1,m),即右上角开始向左下角走. 下棋者只能往左边(left),左下面(left-underneath),下面(underneath),这三个方格下棋. 最后不能移动的人算输 思路: 手动可以画出必胜态以及必败态的图 可以很容易 找出规律 (1) 所有终结点是必败点(P点): (2)从任何必胜点(N点)操作,至少有一种方法可以进入必败点(P点): (3)无