trie 求助
查看原帖
trie 求助
923403
FallingFYC_楼主2024/5/16 20:27

rt,0pts。

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

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][s[s.length() - 1] - 'a'] = 1;
        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 0;
        if (e[p][x]) ++ans;
        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/16 20:27
加载中...