1. 程式人生 > 實用技巧 >CodeForces-1147C Thanos Nim 博弈 思維

CodeForces-1147C Thanos Nim 博弈 思維

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\)

,先手只需要把局面變為\(cnt_m > 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");
}