HDU 2897 邂逅明下【bash博弈】

http://acm.hdu.edu.cn/showproblem.php?pid=2897

HDU 2897 邂逅明下

大意:一堆石子共有n个,A,B两人轮流从中取,每次取的石子数必须在[p,q]区间内,若剩下的石子数少于p个,当前取者必须全部取完。最后取石子的人输。给出n,p,q,问先取者是否有必胜策略?

Bash博弈的变形
假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次每次取的石子个数必须在[p,q]区间内,则:
1.若当前石子共有n = (p+q)*r个,则A必胜,必胜策略为:
    A第一次取q个,以后每次若B取k个,A取(p+q-k)个,如此最后必剩下p个给B,A胜
2.若n = (p+q)*r+left,(1<left<=p),则B必胜,必胜策略为:
   每次取石子活动中,若A取k个,则B取(p+q-k)个,那么最后必剩下left个给A,
   此时left<=p,A只能一次取完,B胜
3.若n = (p+q)*r+left,(p<left<p+q),则A必胜,必胜策略为:
   A第一次取t(1<left-t<=p)个,以后每次若B取k个,A取(p+q-k)个,
   那么最后必剩下1<left-t<=p个给B,A胜

View Code
1 #include<stdio.h>
2  int main()
3 {
4 int n,p,q;
5 while(scanf("%d%d%d",&n,&p,&q)!=EOF)
6 {
7 int left = n%(p+q);
8 if(left<=p&&left>0)
9 {
10 printf("LOST\n");
11 }else
12 printf("WIN\n");
13 }
14 return 0;
15 }
原文地址:https://www.cnblogs.com/AndreMouche/p/1996126.html