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