HDU4764 Stone
阿新 • • 發佈:2020-09-09
思路
可以將題目轉化為 \(n-1\) 顆石子每次可取 \(1\sim k\) 顆的巴什博奕問題,也可以手算找規律。
當 \(n=1\) 時,後手勝。
當 \(n=2\sim k+1\) 時,先手勝。
當 \(n=k+2\) 時,後手勝。
當 \(n=k+3\sim2k+2\) 時,先手勝。
……
然後就發現滿足 \((n-1)\mod (k+1) = 0\) 時後手勝,否則先手勝。
程式碼
/* Author: Loceaner 知識點: 巴什博奕 */ #include <cmath> #include <cstdio> #include <vector> #include <cstring> #include <iostream> #include <algorithm> using namespace std; inline int read() { char c = getchar(); int x = 0, f = 1; for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1; for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48); return x * f; } int n, k; int main() { while (scanf("%d%d", &n, &k) && n && k) { if ((n - 1) % (k + 1) == 0) puts("Jiang"); else puts("Tang"); } return 0; }