1 条题解

  • 1
    @ 2024-10-10 21:38:57

    题目中要求当前最小的不在集合的自然数是奇数还是偶数来判断胜负,我们先将当前集合中的数打上标记即 st[a[i]]=1st[a[i]] = 1,由(Saints are very smart, so both of them made optimal moves. 和 MEXMEX 函数的定义)可知,从 00 开始枚举遇到未被标记的数 BobBobAliceAlice 便给他打上标记便是最优策略,直到遇到一人无法标记时(kk 次机会用完),那么当前数便是最小的不在集合的自然数,由他的奇偶性便可决定胜负。

    注: 题目包含多组测试数据,记得清空数组

    /**
     *    author: 小飞侠
     *    created: 2024.10.08 20:36:54
     */
    #include <iostream>
    #include <cstring>
    using namespace std;
    const int N = 1000010;
    int a[N], s[N];
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            int n, k;
            cin >> n >> k;
            int l = 0, r = 0;
            int maxx = 0;
            for (int i = 1; i <= n; ++i)
            {
                scanf("%d", &a[i]);
                s[a[i]] = 1;
            }
            l = k;
            r = k;
            for (int i = 0;; ++i)
            {
                if (!s[i] && (i & 1))
                {
                    if (l == 0)
                    {
                        maxx = i;
                        break;
                    }
                    s[i] = 1;
                    l--;
                }
                if (!s[i] && (!(i & 1)))
                {
                    if (r == 0)
                    {
                        maxx = i;
                        break;
                    }
                    s[i] = 1;
                    r--;
                }
            }
    
            if (maxx % 2) cout << "Bob" << '\n';
            else cout << "Alice" << '\n';
    
            for (int i = 0; i <= maxx; ++i) s[i] = 0;
    
            for (int i = 1; i <= n; ++i) s[a[i]] = 0;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    5405
    时间
    3000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    10
    已通过
    3
    上传者