1. 程式人生 > 其它 >2021國慶CSP/NOIP衝刺營 Contest06 A. 取石子

2021國慶CSP/NOIP衝刺營 Contest06 A. 取石子

【題意】

有n堆石子,每堆$a_i$個,每次要從任意$\frac{n}{2}$堆中取至少1個(不同的堆取的數量可以不同),問先手必勝還是後手必勝

【分析】

我們考慮如果開始有多於$\frac{n}{2}$個0,那麼顯然先手就必敗了,如果0的個數少於一半,那麼先手可以通過把取$\frac{n}{2}$個非零的取成0,使得後手必敗

推理出當最小值的個數小於等於$\frac{n}{2}$的時候先手必勝,反之後手勝

證明思路:任意一個先手必勝的局面可以有一種方式變成後手必敗,後手必敗的場面走任意一種方式都會變成先手必勝!

【程式碼】

#include<bits/stdc++.h>
using
namespace std; typedef long long ll; int T; int n; int a[10005]; int main() { scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); int gs=1; for(int i=2;i<=n;i++) {
if(a[i]!=a[i-1]) break; gs++; } if(gs<=n/2) printf("Alice\n"); else printf("Bob\n"); } return 0; }