Loading

HDU-2897 邂逅明下

邂逅明下

两个人进行博弈,给出三个数字,\(n, q, p\) 代表一堆有n个石子的石堆,两个人每次至少取 \(q\) 个石子,至多取 \(p\) 个石子,拿走最后一个石子的人输,问先手是否必胜

巴什博弈拓展

显然可以看出,后手可以将两人同时拿的数量控制在 \(p + q\) 内,又因为最后一个拿走石子的人会输,因此最后留给先手的一定要剩下 \([1, q]\) 个石子,否则必然会输

所以如果石头的数量如果是 \([k(q+p) + 1, k(p+q) + q]\) 的话,则必然后手必胜,反之,先手必胜

\(k(q+p)\) 代表 \((q+p)\) 的整数倍

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;

int main()
{
    int a, b, c;
    while(scanf("%d%d%d", &a, &b, &c) != EOF)
    {
        int s = b + c;
        int x = a % s;
        if(x >= 1 && x <= b) printf("LOST\n");
        else printf("WIN\n");
    }
    return 0;
}
posted @ 2022-04-26 21:36  dgsvygd  阅读(14)  评论(0编辑  收藏  举报