CF276B Little Girl and Game

https://codeforces.com/problemset/problem/276/B

题意:

有一个字符串s,两个人轮流操作,每次操作必须删去一个字符

如果轮到B,玩家B可以把字符串重新排列成一个回文串,B就赢了

思考:

回文串,与字符的位置,数量都有关系,但是位置在这里可以被忽略掉

所以我们只考虑字符的数量

一般说到数量 就容易去想到 奇数 偶数

让我们来想想奇偶对于游戏胜负有什么影响

1:不妨先试试全是偶数的时候:比如aaaa,aabb,aabbcc...可以发现 这些都可以重新组合成一个回文串。 因此 先手赢

2:再去试试全是奇数的时候:比如aaa,aaabbb,abcde...可以发现 如果只有奇数次 那么只有一个字母的时候 先手赢

3:现在如果奇数偶数都有:aabbb,aaabb....可以发现 偶数次的字母不影响 因此可以去除出现过偶数次的字母 统计出现奇数次的字母 再判断奇偶性得出答案

#include<iostream>
#include<map>
using namespace std;
map<char,int>mp;
int main() {
    string s;
    cin>>s;
    for(auto c:s) {
        mp[c]++;
    }
    int sum=0;
    int even=0,odd=0;
    for(auto c:mp) {
        if(c.second%2!=0) {
            sum+=c.second;
            odd=1;
        } else {
            even=1;
        }
    }
    if(odd&&!even&&mp.size()==1) {
        cout << "First" << endl;
    } else if(even&&!odd) {
        cout << "First" << endl;
    } else {
        if(sum%2==0) {
            cout << "Second" << endl;
        } else cout << "First" << endl;
    }

}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值