題意:一堆石子n個,A,B兩人輪流從中取,每次取的石子必須在區間[p,q]內,若剩下的石子少於p個,
取石者須全部取完。最後取石子的者輸。給出n,p,q,問先取者是否有必勝策略?
思路:巴什博弈變形
證明:假設先手為A,後手為B,初始n個,除最後一次每次取的石子個數必須
在區間[p,q]內,則:
1.若當前石子共有n = (p+q)*k個,則A必勝,必勝策略為:
A第一次取q個,以後每次若B取m個,A取(p+q-m)個,如此最後必剩下p個給B,A勝
2.若n = (p+q)*k+r,(1<r<=p),則B必勝,必勝策略為:
每次取石子活動中,若A取m個,則B取(p+q-m)個,那麼最後必剩下r個給A,
此時r<=p,A只能一次取完,B勝
3.若n = (p+q)*k+r,(p<r<p+q),則A必勝,必勝策略為:
A第一次取t(1<r-t<=p)個,以後每次若B取m個,A取(p+q-m)個,
那麼最後必剩下1<r-t<=p個給B,A勝
[cpp]
<span style="font-size:18px;color:#006600;"><strong>#include<stdio.h>
int main()
{
int n,p,q,r;
while(scanf("%d%d%d",&n,&p,&q)!=EOF)
{
r=n%(p+q);
if(r<=p&&r>0)
printf("LOST\n");
else printf("WIN\n");
}
return 0;
}</strong></span>