唐氏求条,WA16pts
查看原帖
唐氏求条,WA16pts
1114241
vectorxyz楼主2024/7/31 12:01
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 3e6 + 5;
int _;
int dep[N], t[3000005][65];
struct Trie_Tree
{
    void init(){
        memset(dep, 0, sizeof(dep)); memset(t, 0, sizeof(t)); _=0;
    }
    int getsum(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(string s){
        int fa = 0;
        for(int i = 0;i < s.size();i ++ ){
            int x = getsum(s[i]);
            if(!t[fa][x]) t[fa][x] = ++_;
            fa = t[fa][x];
            dep[fa] ++;
        }
    }
    int query(string s){
        int fa = 0;
        for(int i = 0;i < s.size();i ++ ){
            int x = getsum(s[i]);
            if(!t[fa][x]) return 0;
            fa = t[fa][x];
        }
        return dep[fa];
    }
}tire;

void work()
{
    tire.init();
    int n, q; cin >> n >> q;
    for(int i = 1;i <= n;i ++ ){string s; cin >> s; tire.insert(s);}
    while(q -- ) {string s; cin >> s;cout << tire.query(s) << endl;}
}

signed main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int T; cin >> T; while(T -- ) work();
    return 0;
}
2024/7/31 12:01
加载中...