玄关求助
查看原帖
玄关求助
923403
FallingFYC_楼主2024/5/17 06:10

rt,0pts

#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e6 + 5;
int t , q , n , trie[MAX][26] , inx , e[MAX][26];;
string mod , ask;

void insert(string s)
{
    int p = 0;
    for (int i = 0 ; i < s.length() ; i++)
	{
        int x = s[i] - 'a';
        if (trie[p][x] == 0) trie[p][x] = ++inx;
        if (i == s.length() - 1) e[p][x]++;
        p = trie[p][x];
    }
    return;
}

int find(string s)
{
    int p = 0 , ans = 0;
    for (int i = 0 ; i < s.length() ; i++)
	{
        int x = s[i] - 'a';
        if (!trie[p][x]) return ans;
        if (e[p][x]) ans += e[p][x];
        p = trie[p][x];
    }
    return ans;
}

int main()
{
    cin >> n >> q;
    for (int i = 1 ; i <= n ; i++)
    {
        cin >> mod;
        insert(mod);
    }
    for (int i = 1 ; i <= q ; i++)
    {
        cin >> ask;
        cout << find(ask) << endl;
    }
    return 0;
}
2024/5/17 06:10
加载中...