为什么求`thair` 会超时

P8306 【模板】字典树

lpx2024 @ 2023-03-11 15:33:31

为什么求thair 会超时

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxN=2000010;
int thair[maxN][127],ed[maxN],cnt;
void Insert(string s){
    int t=1;
    for(int i=0;i<s.size();i++){
        int p=s[i];
        if(!thair[t][p]) thair[t][p]=++cnt;
        t=thair[t][p];
        ed[t]++;
    }
}
int Query(string s){
    int t=1;
    for(int i=0;i<s.size();i++){
        int p=s[i];
        t=thair[t][p];
        if(t==0) return 0;
    }
    return ed[t];
}
int main(){
    int t;
    cin>>t;
    for(int i=1;i<=t;i++){
        int n,m;
        cin>>n>>m;
        memset(thair,0,sizeof(thair));
        memset(ed,0,sizeof(ed));
        cnt=1;
        for(int j=1;j<=n;j++){
            string s;
            cin>>s;
            Insert(s);
        }
        for(int j=1;j<=m;j++){
            string s;
            cin>>s;
            cout<<Query(s)<<endl;
        }
    }
    return 0;
}

234都tle


by Rosaya @ 2023-03-11 16:01:11

t 的范围是 1e5 ,你 memset 显然会 T 。


by lpx2024 @ 2023-03-12 22:08:15

@Dark_night_qwq

那要怎么办


|