题目链接:https://loj.ac/problem/10241
算法解析:
我们从最简单的情景开始分析
当石子有1~m个时,毫无疑问,先手必胜
当石子有m+1个时,先手无论拿几个,后手都可以拿干净,先手必败
我们考虑往一般情况推广
设当前的石子数为n=k∗(m+1)+r
先手会首先拿走r个,接下来假设后手拿走x个,先手会拿走m+1−x个,这样博弈下去后手必败
设当前的石子数为n=k∗(m+1)
假设先手拿x个,后手一定会拿m+1−x个,这样下去先手必败
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
if(n%(k+1))
printf("1\n");
else
printf("2\n");
return 0;
}