问题描述
我正在尝试根据特定字符的字符数与其余字符的字符数之间的差异对 2D 向量进行排序。它适用于大多数测试用例,但对于这个特定的测试用例似乎失败了。经过一些调试,我发现以下测试用例的 ch='d' 和 ch='e' 时出现运行时错误。我无法弄清楚这里到底发生了什么。
问题链接:-
https://codeforces.com/contest/1551/problem/C
我的逻辑:- 对于每个字符 {a-z} 说 ch,这可能是删除某些字符串后出现次数最多的决定性字符,我试图消除 ch 减去其他字符的频率差异最大的字符串。
typedef long long int ll;
void solve()
{
ll n;
string s;
cin>>n;
vector<vector<ll>>v(n,vector<ll>(5,0));
unordered_map<char,ll>m;
vector<string>str;
unordered_map<char,ll>old;
for(ll i=0;i<n;i++)
{
cin>>s;
str.push_back(s);
}
for(ll i=0;i<n;i++)
{
for(ll j=0;j<str[i].length();j++)
{
v[i][str[i][j]-97]++;
m[str[i][j]]++;
}
}
old=m;
ll ans=0;
for(char ch='a';ch<='e';ch++)
{
m=old;
ll sum=m['a']+m['b']+m['c']+m['d']+m['e'];
if(sum-m[ch]<m[ch])
{
ans=max(ans,n);
}
sort(v.begin(),v.end(),[ch](const vector<ll>&a,const vector<ll>&b)
{
return (a[ch-97]-(a[0]+a[1]+a[2]+a[3]+a[4]))<=(b[ch-97]-(b[0]+b[1]+b[2]+b[3]+b[4]));
});
for(ll i=0;i<n;i++)
{
for(ll j=0;j<5;j++)
{
m[j+97]=m[j+97]-v[i][j];
}
ll sumrest=m['a']+m['b']+m['c']+m['d']+m['e'];
if(m[ch]>sumrest-m[ch])
{
ans=max(ans,n-i-1);
}
}
}
cout<<ans<<"\n";
}
测试用例:-
1
43
a
d
bbc
a
dda
c
e
bb
cbd
c
dc
e
caab
d
c
e
e
bd
d
a
a
b
a
c
d
c
d
ba
e
c
ecdb
bdbd
d
e
cb
ac
ccd
cb
cda
da
bb
d
c
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)