Loading

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");
}
posted @ 2020-09-04 20:51  MQFLLY  阅读(187)  评论(0编辑  收藏  举报