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