HDU 2897 邂逅明下(巴什博奕)

题意:

每行有三个数字n,p,q,表示一堆硬币一共有n枚,从这个硬币堆里取硬币,一次最少取p枚,最多q枚,如果剩下少于p枚就要一次取完。两人轮流取,直到堆里的硬币取完,最后一次取硬币的算输。对于每一行的三个数字,给出先取的人是否有必胜策略,如果有回答WIN,否则回答LOST。

题解:

这题写的挺有意思的,要是我也能邂逅这mm就好了。
这题像是一个对称的行为,最优的策略是你取k个我就取p+q-k个,以p+q为对称点,所以对p+q取余看结果就好。

代码:

#include <stdio.h>

int main()
{
    int n,p,q;
    while(~scanf("%d%d%d",&n,&p,&q))
    {
        n = n%(p+q);
        if(n>0 && n<=p)
        printf("LOST
");
        else
        printf("WIN
");
    }

    return 0;
}
原文地址:https://www.cnblogs.com/s1124yy/p/5704327.html