HDU 2897 邂逅明下
2014-03-16 21:22
169 查看
题目链接: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。。。
第一感觉是打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 邂逅明下
- HDU 2897 邂逅明下
- HDU 2897 邂逅明下(简单博弈)
- 邂逅明下 - HDU 2897 博弈论
- hdu 2897 邂逅明下 (巴什博奕)
- HDU 2897 邂逅明下(博弈)
- HDU 2897 邂逅明下 (简单博弈,找规律)
- 邂逅明下 HDU - 2897
- HDU 2897 邂逅明下 (找规律)
- hdu 2897 邂逅明下
- HDU 2897 邂逅明下 (经典博弈变形)
- HDU 2897 邂逅明下
- HDU 2897 邂逅明下 简单博弈
- HDU 2897 邂逅明下(巴什博弈变形)
- HDU 2897 邂逅明下 (经典博弈变形)
- HDU 2897-邂逅明下(sg函数)
- hdu 2897 邂逅明下
- HDU 2897 邂逅明下(巴什博弈)
- HDU 2897 邂逅明下 (博弈)
- HDU 2897 邂逅明下(博弈)