節目大略步驟爲:先用糧食(一般是稻米)在地上“畫”出若干級臺階(表示N級浮屠)。又有若干小和尚隨機地“站”在某個臺階上。最高一級臺階必須站人,其它任意。(如圖1所示)
兩位參加遊戲的法師分別指揮某個小和尚向上走任意多級的臺階,但會被站在高級臺階上的小和尚阻擋,不能越過。兩個小和尚也不能站在同一臺階,也不能向低級臺階移動。
兩法師輪流發出指令,最後所有小和尚必然會都擠在高段臺階,再也不能向上移動。輪到哪個法師指揮時無法繼續移動,則遊戲結束,該法師認輸。
對於已知的臺階數和小和尚的分佈位置,請你計算先發指令的法師該如何決策才能保證勝出。
#include<stdio.h>
int main()
{
int pos[100],q=0,nim[100];
char c;
while(1)
{
scanf("%d%c",&pos[q++],&c);
if(c=='\n')
break;
}
/*
或者:
while(~scanf("%d",&pos[q]))
{
q++;
}
*/
int p=0;
for(int i=1; i<q; i++)
nim[p++]=pos[i]-pos[i-1]-1;
int ans=0;
for(int i=0; i<p; i+=2)
ans^=nim[i];
if(ans)
{
int flag=0;
for(int i=0; i<p; i++)
{
for(int j=1; j<=nim[i]; j++)
{
nim[i]-=j;
if(i!=0)
nim[i-1]+=j;
int ans1=0;
for(int k=0; k<p; k+=2)
ans1^=nim[k];
if(ans1)
{
nim[i]+=j;
if(i!=0)
nim[i-1]-=j;
}
else
{
printf("%d %d\n",pos[i],pos[i]+j);
flag=1;
break;
}
}
if(flag)
break;
}
}
else
printf("-1\n");
return 0;
}