B/G 小红的字符串构造

不使用trie树的邪修解法

使用unordered_map统计每一个(题中所给的字符串)的出现次数。之后对于每个,枚举所有前缀可能并且将出现次数相加。若出现次数之和等于,则为本题的答案。


void sol() {
    long long n,k;
    cin>>n>>k;
    vector<string> s(n);
    unordered_map<string,long long> mp;
    for(int i=0;i<n;i++){
        cin>>s[i];
        mp[s[i]]++;
    }
    for(int i=0;i<n;i++){
        long long tmp=0;
        string stmp="";
        for(int j=0;j<s[i].length();j++){
            stmp+=s[i][j];
            tmp+=mp[stmp];
        }
        if(tmp==k){
            cout<<s[i]<<endl;
            return;
        }
    }
    cout<<-1<<endl;
}