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

 

posted @ 2021-11-08 12:59  andyc_03  阅读(39)  评论(0编辑  收藏  举报