https://codeforces.com/contest/2003/problem/C
题意:。。。
思路:如果要使满足条件的有序对最多,那么首先如果两个字符相等,那么无论如何排列,最终的贡献值都不会变。
再看字符不相等的情况, 假如有aabbcc,那么abcabc总是优于aabbcc,因为如果一个字符出现了多次,那么像aab, bcc这种就会没有贡献了,哪怕是abababa,也会让所有长度>2的字符串有贡献。
所以有一个策略就是优先让所有相邻的字符不相等,可以保证一定正确。
void solve(){
int n;
cin >> n;
string s;
cin >> s;
array<int, 26> cnt = {};
for (auto c : s) {
cnt[c - 'a'] ++;
}
bool ok = false;
string ans;
ans.reserve(n);
while (!ok) {
ok = true;
for (int i = 0; i < 26; ++i) {
if (cnt[i] -- > 0) {
ans.push_back(i + 'a');
ok = false;
}
}
}
cout << ans << '\n';
}
标签:Turtle,字符,Pairs,Good,ok,string,cnt,cin,ans
From: https://www.cnblogs.com/yxcblogs/p/18383980