请求加强数据
查看原帖
请求加强数据
578029
ivyjiao楼主2024/8/25 15:44

rt,我在开字典树时不小心开成了 10510^5 也过了,但是需要开 10610^6,就是 ∑∣Si∣\sum |S_i| 吧。

#include<bits/stdc++.h>
using namespace std;
int n,m,trie[100001][27],cnt,b[100001];
string s[100001],t[100001];
int getnum(char x){
    return x-'a';
}
void insert(string s){
    int p=0;
    for(int i=0;i<s.size();i++){
        int c=getnum(s[i]);
        if(!trie[p][c]) trie[p][c]=++cnt;
        p=trie[p][c];
    }
    b[p]++;
}
int query(string s){
    int p=0,ans=0;
    for(int i=0;i<s.size();i++){
        int c=getnum(s[i]);
        if(!trie[p][c]) return ans;
        p=trie[p][c];
        ans+=b[p];
    }
    return ans;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>s[i];
        insert(s[i]);
    }
    for(int i=1;i<=m;i++){
        cin>>t[i];
        cout<<query(t[i])<<endl;
    }
}
2024/8/25 15:44
加载中...