HDU 2897 邂逅明下

题目链接:HDU 2897 邂逅明下

第一感觉是打SG表,后来听说会超时,幸亏没这么做。。。

我们先假设A先取,B后取。初始状态下有N个石子,当N=(p+q)*r时,(r为任意自然数),此时,A先取q个石子,以后B每次取k个石子,那么A就从剩下的石子里面取(p+q)-k个石子,最后剩下p个石子,B只能一次取完,所以此时A必胜。

若N=(p+q)*r+s,其中0<s<=p,则当A取k个石子,那么B就从剩下的石子中取掉p+q-k个石子,如此下去,最后剩下s个石子给A,所以B必胜。

若N=(p+q)*r+s,其中p<s<p+q,那么A第一次取掉t个,其中1<s-t<=p,以后若B每次取k个,那么A就从剩下的石子中取掉p+q-k个石子,那么最后必剩下s-t个石子,1<s-t<=p,所以A必胜。

使用c++输入输出,贡献了一次TLE。。。

#include <iostream>
#include <stdio.h>

using namespace std;

int n,p,q;

int main()
{
    //while(cin >> n >> p >> q)
    while(scanf("%d %d %d",&n,&p,&q) != EOF)
    {
        if(n % (p + q) == 0)
            //cout << "WIN" << endl;
            printf("WIN\n");
        else if(n % (p + q) <= p)
            //cout << "LOST" << endl;
            printf("LOST\n");
        else
            //cout << "WIN" << endl;
            printf("WIN\n");

    }
}



你可能感兴趣的:(HDU 2897 邂逅明下)