1 条题解

  • 1
    @ 2023-8-30 15:34:20

    image

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N = 3000005;
    int n, m, k, s, t, tot;
    int trie[N][123], sum[N];
    char str[N];
    void insert(char *str){ // 在字典树中插入字符串str
        int len = strlen(str), p = 1;
        for (int k = 0; k < len; ++k){ // 遍历str字符串
    		int ch = str[k]; // 映射小写字母
            if (trie[p][ch] == 0) // 如果没有这个节点
    			trie[p][ch] = ++tot; 
    		p = trie[p][ch];// 跳到该节点
    		sum[p]++;//以p为根的子树中结束位置的字符串数量+1 
    	}
    }
    int query(char *str){
    	int len = strlen(str), p = 1;
    	for (int k = 0; k < len; k++){ // 遍历str字符串
            p = trie[p][str[k]]; //令p沿着T串字符前进
    	    if (p == 0) // 如果没有这个节点
                return 0;
    	}
        return sum[p];
    }
    int main(){ 
    	int T;
    	cin>>T;
    	while (T--){ 
    		for (int i=1;i<=tot;++i){//清空 
    			sum[i]=0;
    			for (int j=0;j<=122;++j) trie[i][j]=0;
    		}
    		tot=1;
    		cin >> n >> m;
    		for (int i = 1; i <= n; ++i){
    			cin >> str;
    			insert(str);
    		}
    		for (int i = 1; i <= m; ++i){
    			cin >> str;
    			cout << query(str) << "\n";
    		}
    	}
    }
    
    • 1

    信息

    ID
    482
    时间
    1000ms
    内存
    1024MiB
    难度
    7
    标签
    递交数
    97
    已通过
    25
    上传者