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;
}