目录

P2252-[SHOI2002]取石子游戏|【模板】威佐夫博弈

P2252-[SHOI2002]取石子游戏|【模板】威佐夫博弈

题目:

题目描述:

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

输入格式:

输入共一行。

第一行共两个数a, b,表示石子的初始情况。

输出格式:

输出共一行。

第一行为一个数字1、0或-1,如果最后你是胜利者则为1;若失败则为0;若结果无法确定则为-1。

样例:

样例输入1:

1
8 4

样例输出1:

1
1

思路:

实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Problem: P2252 [SHOI2002]取石子游戏|【模板】威佐夫博弈
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2252
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)

#include "ybwhead/ios.h"
const double gold = (sqrt(5.0) + 1.0) / 2.0;
int main()
{
    long long n, m;
    yin >> n >> m;
    if (n < m)
        swap(n, m);
    if (m == (long long)(gold * (n - m)))
        puts("0");
    else
        puts("1");
    return 0;
}