zoukankan      html  css  js  c++  java
  • [CF276B] Little Girl and Game

    [CF276B]

    Description

    给定字符串 (S) ,两人轮流,每次从字符串中任意取出一个字符并从原串中删去。如果某人某次操作前,串种剩余的字符集合经过排列可以得到回文串,那么这个人就胜利。求胜负。

    Solution

    显然这个字符串可以看成一个字母多重集合。那么我们统计出每种字符出现的次数。考虑有多少种字母出现次数为奇数次,记为 (m) 。如果 (m le 1) ,那么先手胜利。

    (k=2) 时,先手可以将将一个奇数次转化为偶数次,那么后手胜利;先手也可以将一个偶数次转化为奇数次,假如可以进行这样的操作,那么后手将这个新转化的奇数次转化为偶数次,局面回归到与开局等价的状态,直到某个时刻先手不能再制造出新的奇数次,此时必然后手胜。

    (k=3) 时,先手先将一个奇数次转为偶数次,这样就转化到了 (k=2) 的状态,先后手状态偏移,于是先手胜利。

    (k=4) 时,先手可以先将一个奇数次转化为偶数次,那么这时候转化为 (k=3) 故后手胜利;先手也可以先将一个奇数次转化为偶数次,然后仿照 (k=2) 情况进行后续,到某个时刻先手不能再制造出新的奇数次,此时必然后手胜。

    同理可得后续情况。

    #include <bits/stdc++.h>
    using namespace std;
    
    string str;
    int a[205],m;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>str;
        for(int i=0;i<str.length();i++)
        {
            a[str[i]]++;
        }
        for(int i='a';i<='z';i++)
        {
            if(a[i]&1) ++m;
        }
        if(m<=1) cout<<"First"<<endl;
        else cout<<(m&1?"First":"Second")<<endl;
    }
    
  • 相关阅读:
    LeetCode -- 最大连续乘积子序列
    openCV 和GDI画线效率对照
    java并发编程之CountDownLatch
    约瑟夫环问题
    (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
    群“模”乱舞之简单工厂模式
    在iPad iOS8环境下打开相冊或者拍照
    js斐波那契数列求和
    cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)
    DOM基础及DOM操作HTML
  • 原文地址:https://www.cnblogs.com/mollnn/p/11735089.html
Copyright © 2011-2022 走看看