• [CF1190B] Tokitsukaze, CSL and Stone Game


    [CF1190B] Tokitsukaze, CSL and Stone Game - 博弈

    Description

    面前有(n)堆石子,第(i)堆石子有(a_i)颗石头,他们轮流取石子。每一次,取石子的人会选中一个非空的石子堆并取走其中的一颗石子。如果在某个人的回合前所有的石子堆都是空的,或者在他取完后有两堆的石子数量相同(两堆都没有石子也算),则他输掉游戏。

    Solution

    如果能找到这样的子集,那么一定是必败状态

    x,x,x

    x,x,y,y

    x,x,x-1

    0,0

    0,1,2,...,n-1

    如何证明充分性?

    假如当前局面不属于上面任何一种,为了让这种情况保持下去,最后一定会变成 0,1,2,...,n-1 这样子(否则就会出现重复)

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 100005;
    
    int n;
    
    signed main()
    {
        map<int, int> mp;
        cin >> n;
        vector<int> a(n);
        for (int i = 1; i <= n; i++)
        {
            int x;
            cin >> x;
            a[i - 1] = x;
            mp[x]++;
        }
        int flag = 1, cnt = 0;
        for (auto [x, y] : mp)
        {
            if (mp[x] >= 3)
                flag = 0;
            if (mp[x] >= 2 && mp[x - 1])
                flag = 0;
            if (mp[x] >= 2)
                ++cnt;
        }
        if (mp[0] >= 2)
            flag = 0;
        if (cnt > 1)
            flag = 0;
    
        sort(a.begin(), a.end());
        int delta = 0;
        for (int i = 0; i < n; i++)
            delta += a[i] - i;
        if (delta % 2 == 0)
            flag = 0;
        cout << (!flag ? "cslnb" : "sjfnb") << endl;
    }
    
  • 相关阅读:
    js 实现 间隙滚动效果
    js实现无缝滚动
    js 实现弹出层效果
    jQuery实现网页定位导航
    右侧定位的样式
    jQuery实现点击按钮展开和收起
    js实现点击按钮控制展开与收起.
    【BZOJ1202】[HNOI2005]狡猾的商人 带权并查集
    【BZOJ1067】[SCOI2007]降雨量 RMQ+特判
    【BZOJ1367】[Baltic2004]sequence 左偏树
  • 原文地址:https://www.cnblogs.com/mollnn/p/14476661.html
Copyright © 2020-2023  润新知