请求数据加强

P8306 【模板】字典树

Fuxh_18 @ 2024-07-24 09:49:10

这是我第一次 AC 的代码,我没有给 cnt,idx清空,trie 还清空错了,却 AC 了。后来帮同学看代码时才发现(有点小丑)。

#include<bits/stdc++.h>
using namespace std;
const int N=3e6+1;
int n,m;
char s[N];
int cnt[N],trie[N][125],idx=1;
void insert(char *s){
    int p=1,len=strlen(s+1);
    for(int i=1;i<=len;i++){
        int x=(int)s[i];
        if(!trie[p][x]){
            trie[p][x]=++idx;
        }
        p=trie[p][x];
        cnt[p]++;
    }
}
int find(char *s){
    int p=1,len=strlen(s+1);
    for(int i=1;i<=len;i++){
        int x=(int)s[i];
        if(!trie[p][x]){
            return 0;
        }
        p=trie[p][x];
    }
    return cnt[p];
}
void init(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=125;j++){
            trie[i][j]=0;
        }
    }
}
int main(){
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m;
        init();
        for(int i=1;i<=n;i++){
            cin>>s+1;
            insert(s);
        }
        for(int i=1;i<=m;i++){
            cin>>s+1;
            cout<<find(s)<<endl;
        }
    }
    return 0;
}

by shiziyu111 @ 2024-07-24 19:16:44

@Fuxh_18 qp


by wfirstzhang @ 2024-08-07 14:49:18

其实这就相当于以 idx + 1 为根结点再新建树,没有问题,而且前面不需要清空。所以这三个错误和在一起就相当于没有错误,不是数据的锅。


|