问题模型:
只有一堆n个物品,两个人轮流从这堆物品中取物品,规定每次至少取一个,最多取m个。
解决思路:
若n=m+1时,由于先手最多只能取m个,所以无论先手怎么取,剩下的都可以让后手取完,即后手必胜。
假设n=(m+1)*r+s。
(1)当s不等于0,先手要拿走s个物品,此时后手处于在剩下(m+1)*r个物品的状态进行取物品;假设
后手取k(1<=k<=m)个物品,则先手应该采取的决策时取走m+1-k个,此时让后手处于(m+1)*(r-1)个物品的
状态,如此下去,先手就可以取走最后一个石头,而将(m+1)*0的状态给予后手(即后手无法取物品,无法将
游戏继续,故先手赢)。
(2)当s等于0,后手采用(1)中先手采用的方法可以使得自己必胜,所以此时后手必胜。
总结:
当n=(m+1)*r+s(s!=0),即n%(m+1)!=0时,先手必胜。
当n=(m+1)*r+s(s==0),即n%(m+1)==0时,后手必胜。
巴什博弈的裸题:HDU 1846
推荐题目:HDU 2149&&HDU 4764&&HDU 2188&&HDU 2897&&HDU 1847
/*
HDU 1846 取石头游戏
题意:n个石子,每次至少取一个,最多取m个,
最后取完石子的人为胜。
分析:n%(m+1)!=0 先手必胜
n%(m+1)==0 后手必胜
*/
#include<cstdio>
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
if(n%(m+1)!=0)
printf("first\n");
else
printf("second\n");
}
return 0;
}