P8306 【模板】字典树 来自一个poor的警示

P8306 【模板】字典树

ColaPig @ 2024-08-18 21:07:03

千万别用memset进行clear,会TLE,我在这卡了一个多小时

顺带帖一下自己的代码,不是很好看别喷

#include<bits/stdc++.h>
using namespace std;
int nex[3000005][70],cnt,t,n,q;
char s[3000005];
int exist[3000005];

int getnum(char x){
    if(x>='A'&&x<='Z')
        return x-'A';
    else if(x>='a'&&x<='z')
        return x-'a'+26;
    else
        return x-'0'+52;
}

void insert(char* s){
    int p=0;
    int l=strlen(s);
    for(int i=0;i<l;i++){
        int c=getnum(s[i]);
        if(!nex[p][c]) nex[p][c]=++cnt;
        p=nex[p][c];
        exist[p]++;
    }
}

int find(char* s){
    int l=strlen(s);
    int p=0;
    for(int i=0;i<l;i++){
        int c=getnum(s[i]);
        if(!nex[p][c]) return 0;
        p=nex[p][c];
    }
    return exist[p];
}
int main(){
    cin>>t;
    while(t--){
        for(int i=0;i<=cnt;i++)
            for(int j=0;j<=122;j++)
                nex[i][j]=0;
        for(int i=0;i<=cnt;i++)
            exist[i]=0;
        cnt=0;
        scanf("%d%d",&n,&q);
        for(int i=1;i<=n;i++){
            scanf("%s",s);
            insert(s);
        }
        for(int i=1;i<=q;i++){
            scanf("%s",s);
            printf("%d\n",find(s));
        }
    }

}

by EityDawn @ 2024-08-18 21:14:24

@ColaPig 讨论区里还是不要贴AC代码为好


by mooktian @ 2024-10-10 11:11:04

@ColaPig 多组数据清零哪里为啥j要设成122,求指点,


by mooktian @ 2024-10-10 11:12:16

我是数组开到62,所以j设成62也AC了,所以我很好奇,为啥要用122???


|