zoukankan      html  css  js  c++  java
  • [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;
    }
    
  • 相关阅读:
    堆排序
    归并排序
    Distinct Subsequences——Leetcode
    Longest Consecutive Sequence——Leetcode
    Different Ways to Add Parentheses——Leetcode
    Haproxy 安装配置详解
    Saltstack常用模块
    SaltStack之安装
    tcpcopy复制线上流量
    nginx配置详解与优化
  • 原文地址:https://www.cnblogs.com/mollnn/p/14476661.html
Copyright © 2011-2022 走看看