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;
}
}