16pts不知道错哪了???
查看原帖
16pts不知道错哪了???
1251774
fanjiayu666楼主2024/10/23 21:04
#include<bits/stdc++.h>
using namespace std;
int t,n,m;
int change(char a){
    if(a>='A'&&a<='Z')return a-'A';
    else if(a>='a'&&a<='z')return a-'z'+26;
    else if(a>='0'&&a<='9')return a-'0'+26*2;
    
}
struct trie{
    int nex[3000010][26*2+10],cnt;
    int end[3000010];
    void emmset(int a){
        for(int i=1;i<=a;i++)memset(nex[i],0,sizeof(nex[i]));
        for(int i=1;i<=a;i++)end[i]=0;
    }
    void insert(char s[],int l){
        int p=0;
        for(int i=0;i<l;i++){
            int c=change(s[i]);
            if(!nex[p][c])nex[p][c]=++cnt;
            p=nex[p][c];
        }
        end[p]++;
    }
    int find(char s[],int l){
        int p=0;
        for(int i=0;i<l;i++){
            int c=change(s[i]);
            if(!nex[p][c])return 0;
            p=nex[p][c];
        }
        return end[p];
    }
};
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>t;
    while(t--){
        trie tree;
        cin>>n>>m;
        tree.emmset(n);
        for(int i=1;i<=n;i++){
            char s[3000010];
            cin>>s;
            tree.insert(s,strlen(s)-1);
        }
        for(int i=1;i<=m;i++){
            char s[3000010];
            cin>>s;
            cout<<tree.find(s,strlen(s)-1)<<endl;
        }
    }
}

内存正常,时间正常,就是只有16pts???

2024/10/23 21:04
加载中...