2021國慶CSP/NOIP衝刺營 Contest06 A. 取石子
阿新 • • 發佈:2021-11-08
【題意】
有n堆石子,每堆$a_i$個,每次要從任意$\frac{n}{2}$堆中取至少1個(不同的堆取的數量可以不同),問先手必勝還是後手必勝
【分析】
我們考慮如果開始有多於$\frac{n}{2}$個0,那麼顯然先手就必敗了,如果0的個數少於一半,那麼先手可以通過把取$\frac{n}{2}$個非零的取成0,使得後手必敗
推理出當最小值的個數小於等於$\frac{n}{2}$的時候先手必勝,反之後手勝
證明思路:任意一個先手必勝的局面可以有一種方式變成後手必敗,後手必敗的場面走任意一種方式都會變成先手必勝!
【程式碼】
#include<bits/stdc++.h> usingnamespace 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; }