微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ 自定义排序一个 2d 向量抛出运行时错误我该如何解决这个问题?

如何解决C++ 自定义排序一个 2d 向量抛出运行时错误我该如何解决这个问题?

我正在尝试根据特定字符的字符数与其余字符的字符数之间的差异对 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 举报,一经查实,本站将立刻删除。