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 }

你可能感兴趣的:(bash)