CodeForces-1147C Thanos Nim 博弈 思維
阿新 • • 發佈:2020-09-04
CodeForces-1147C Thanos Nim 博弈 思維
題意
有偶數\(n\) 堆石子,每次必須選擇\(n/2\) 堆並每堆至少取出\(1\) 堆石子,當不能取石子時判定為輸。
分析
當某人把某堆變為0時就面臨必敗局面,這是因為下一個人只需要把任意\(n/2\) 堆變為\(0\) ,下一個就無法選出\(n/2\)堆了。
此題結論,令\(m\) 為最小的石子數,若\(cnt_m > n / 2\) 時,後手必勝,因為先手無論怎麼選擇,都至少要選到\(m\) ,此時後手總可以保持最小的堆數 $ > n / 2$ ,這樣最終總是先手先把最小堆數的大小變為\(0\)
若\(cnt_m \leq n / 2\)
程式碼
int a[55]; int main() { int n = readint(); for (int i = 0; i < n; i++) a[i] = readint(); sort(a, a + n); int cnt = 1; for (int i = 1; i < n; i++) { if (a[i] != a[0]) break; else cnt++; } if (cnt > n / 2) puts("Bob"); else puts("Alice"); }