[HEOI2014] 人人尽说江南好
题目大意:一个博弈游戏,地上(n)堆石子,每堆石子有(1)个,每次可以合并任意两个石子堆(a,b),要求(a + b leq m),问先手赢还是后手赢
Solution
可以知道,最终的石子堆是m,m,m,m, n mod m这样的,并不一定是这样,比如(1,1,1,1,1),可以是合并为(3,2)或(4,1),但总数都是(lceil frac{n}{m}
ceil)堆,每次合并两个堆,所以总合并次数为(n-lceil frac{n}{m}
ceil),若合并次数为奇数,则先手赢,若合并次数为偶数,则后手赢。
Code
// luogu-judger-enable-o2
#include <iostream>
#include <cstdio>
#define sc(x) scanf("%d", &x)
using namespace std;
int main(){
int T, n, m;
sc(T);
while(T--){
sc(n), sc(m);
if((n - (n - 1) / m - 1) & 1)
puts("0");
else
puts("1");
}
return 0;
}