您的位置:首页 > 其它

CodeForces 593A 2Char(贪心,模拟)

2017-10-07 20:53 344 查看
在这是一道很让人痛苦的题,建议在心情好的时候刷http://codeforces.com/problemset/problem/593/A

这道题的意思是给出几行字符串,从中选择符合一些规则的字符串,让这些字符串的长度和最大。规则就是这些被选中的字符串只能由两个字母构成,所有被选中的字符串的组成字母必须都相同。

我的想法十分的暴力,首先如果一个字符串出现了超过2个字母,这个字符串是不能选择的,那么对于可以选择的字符串,我们提取出这两个字母,将这个字符串的长度存到map中,之后报枚举所有的情况,注意如果两个字符是相同的时候一定要判断一下。

#include <bits/stdc++.h>
#include <cstring>
using namespace std;
int main()
{
int n = 0;
int mx = 0;
cin>>n;
map<string,int> ss;
map<char,int> s;
set<char> c;
while(n--)
{
c.clear();
string str;
cin>>str;
for(int i = 0; i<str.length(); i++)
{
c.insert(str[i]);
}
if(c.size() > 2)continue;
string temp = "";
for(auto ch : c)
{
temp += ch;
}
ss[temp]+=str.length();

}
//    for(auto t : ss)
//    {
//        cout<<t.first<<" "<<t.second<<endl;
//    }
for(char i = 'a' ; i<='z'; i++)
{
for(char j = 'a'+1 ; j<='z'; j++)
{
string com = "",com1 = "",com2= "";
com+=i;
com+=j;
com1 += i;
com2 += j;
if(i == j)
{
mx = max(mx,ss[com1]);
}
//cout<<com<<" "<<com1<<" "<<com2<<endl;
else mx = max(mx,ss[com2]+ss[com1] +ss[com]);
}
}
cout<<mx<<endl;
return 0;
}


我发现CF Div2的题都很是套路啊……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces