链接:https://codeforces.com/problemset/problem/1551/C
题意:
给你几个字符串,从中挑选尽可能多的字符串来组成一个“故事”,保证其中一个字母的数量远大于其余字母的数量;
题解:
数据量不大,暴力跑,只有5个字母;因为 num[x]>num[其他] 即num[x]>(总长- num[x])即 num[x]*2-总长>0;根据这个算出每个字符串中对应字母的权值,然后处理;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll t;
cin >> t;
while (t--)
{
int n;
cin >> n;
vector<int>zi[5];
for (int i = 0; i < n; i++)
{
string s;
cin >> s;
map<char, int>mp;
for (int j = 0; j < s.size(); j++)
{
mp[s[j]]++;
}
for (int j = 0; j <5; j++)
{
zi[j].push_back(mp[char('a' + j)] * 2 - int(s.size()));
}
}
ll ans = 0, sum = 0;
for (int i = 0; i < 5; i++)
{
sum = 0;
ll gong = 0;
sort(zi[i].begin(), zi[i].end());
for (int j = n - 1; j >= 0; j--)
{
if ((gong + zi[i][j]) > 0)
{
gong += zi[i][j];
sum++;
}
}
ans = max(ans, sum);
}
cout << ans << endl;
}
}