HDU-1846 Brave Game
题目大意
有n个石子,两人轮流进行取石子,每次可以取走\(1~m\)个石子,最先取光石子的一方为胜,输出胜者?
Sample Input
2
23 2
4 3
Sample Output
first
second
思路
直接就是:巴什博奕。
①当
n<=m
时,先手可以一次取完,则先手必胜。
②当
n==m+1
时,先手不管怎么取都会使剩余的石子
nn
有
1<=nn<=m
,则先手必败。
③当
m+1<n<2∗(m)+1
时,先手可以取石子,使得石子只剩
m+1
个,则先手必胜。
④当
n==2∗(m+1)
时,先手不管怎么取都会使剩余的石子
nn
有
m+2<=nn<=2∗m+1
,则先手必败。
……
则先手的必胜策略是每次使剩余石子为
m+1
的整数倍,如果不能则先手必败。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
int main() {
int T;
scanf("%d",&T);
while(T-->0) {
scanf("%d%d",&n,&m);
printf("%s\n",(n%(m+1))==0?"second":"first");
}
return 0;
}