HDU 1846 Brave Game
题目分析
经典的巴什博弈例题。
当 \((m+1) \mid n\) 时,先手必败,否则先手必胜。
证明:
假设\((m + 1) \mid n\),先手拿了 x 个, 后手就会拿 m+1-n 个 , 这样无论怎么拿,最后只会剩下 m+1 个,在这种情况下,无论先手拿 1~m 中的哪一个,都会剩下 m+1-x 个, 且 \(1 \leq m + 1 - x \leq m\), 因此后手可以将剩下的石头取光而必胜。
当上边假设不成立的情况时, 先手可以先取走 \(n \ \operatorname{mod} \ (m+1)\) 个 ,这样问题就转化成了后手面对 \((m+1) \mid n\) 个石子的情况了, 也就是这种情况的后手转化成了上一种情况的先手。因此在这种情况下先手必胜。
code
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define N 100010
#define M 1010
using namespace std;
int T, n, m;
int read() {
	int s = 0, f = 0; char ch = getchar();
	while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
	while (isdigit(ch)) s = s * 10 + (ch ^ 48), ch = getchar();
	return f ? -s : s;
}
int main() {
	T = read();
	while (T--) {
		n = read(), m = read();
		if (n % (m + 1) == 0) puts("second");
		else puts("first");
	}
	return 0;
}

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号