CODEVS 4189 (前缀是否出现)

题目链接:http://codevs.cn/problem/4189/

#include <iostream>
#include <cstring>
#include <cstdio>
#define mem(a,b) memset(a,b,sizeof(a));
using namespace std;
typedef long long ll;
const int maxn = 500005;
const ll INF = 0x3f3f3f3f;
int tot,n,trie[maxn][26],sum[maxn];
bool vis[maxn],flag;
void Insert(char *s,int rt)
{
    int len = strlen(s);
    for(int i = 0; i < len; i++)
    {
        int k = s[i] -'a';
        if(trie[rt][k] == 0) trie[rt][k] = ++tot;
        sum[trie[rt][k]]++;
        rt = trie[rt][k];
    }
}
int Find(char *s,int rt)
{
    int len = strlen(s);
    for(int i = 0; i < len; i++)
    {
        int k = s[i] -'a';
        rt = trie[rt][k];
        if(rt == 0) return false;
    }
    return true;
}
int main()
{
    tot = 0;
    int rt = 0;
    char s[105];
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> s;
        Insert(s,rt);
    }
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> s;
        if(Find(s,rt)) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

 

posted on 2019-08-10 08:29  一只小毛球  阅读(178)  评论(0编辑  收藏  举报

导航