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;
}

原文地址:https://www.cnblogs.com/LLLAIH/p/11330442.html

时间: 2024-11-13 09:36:10

CODEVS 4189 (前缀是否出现)的相关文章

codevs 4189 字典

4189 字典 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的单词 如:skyzhong想查询a 那么只要是a开头的单词就可以了 skyzhong只想知道里面有没有这一个单词(因为没有他就不查了) 若有,请输出YES.若没有,请输出NO 输入描述 Input De

AC日记——字典 codevs 4189

4189 字典 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的单词 如:skyzhong想查询a 那么只要是a开头的单词就可以了 skyzhong只想知道里面有没有这一个单词(因为没有他就不查了) 若有,请输出YES.若没有,请输出NO 输入描述 I

codevs 4189 字典(字典树)

#include<iostream> #include<cstdio> #include<cstring> #define maxn 300100 #define maxx 1010 using namespace std; char s[maxx]; struct node { int next[30]; bool w; }tree[maxn]; int tot; void add() { int l=strlen(s),i,j,k; int now=0; for(i

codevs——4189 字典

题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的单词 如:skyzhong想查询a 那么只要是a开头的单词就可以了 skyzhong只想知道里面有没有这一个单词(因为没有他就不查了) 若有,请输出YES.若没有,请输出NO 输入描述 Input Description 第一行一个数n 第二行到第n+1行,一行一个字符串 再下一行一个数m,表示skyzhon

trie tree

trie树也叫字典树,前缀树 字典树(Trie)有如下几条性质 结点不存值,依靠树枝(边)存值 从根节点到某一处标记点为一个单词 每个结点到其子节点的边上的值各不相同 插入和查询复杂度均为O(mn),m为字符串个数,n为字符串平均长度 树深度由最长字符串决定 依次便可做出trie树的结点结构 struct trie{ int cnt=0; bool word=0; trie * son[26]={0}; }; 让我们依次价绍这几个成员的含义 cnt 这条边上有几个单词经过,即有多少指定的前缀相同

CODEVS——T 4189 字典

http://codevs.cn/problem/4189/ 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的单词 如:skyzhong想查询a 那么只要是a开头的单词就可以了 skyzhong只想知道里面有没有这一个单词(因为没有他就不查了) 若有,

zstu.4189: 逻辑运算(构建 &amp;&amp; 前缀表达式入门)

4189: 逻辑运算 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 274  Solved: 42 Description 还记得大学里学过的模电么,今天就让我们将与或非变成一道题吧. 给你一个与或非的表达式,求出这个表达式的值,表达式总共有八种字符. 三种逻辑运算符按照优先级排列如下. ‘!’:表示取反. ‘&’:逻辑与. ‘|’:逻辑或. 两个字符‘T’,‘F‘分别表示true和 false. 另外还有左右括号,空格三种字符.跟一般的表达式一

【BZOJ-1926】粟粟的书架 二分 + 前缀和 + 主席树

1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MBSubmit: 616  Solved: 238[Submit][Status][Discuss] Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱的小朋友,她的爱好是画画和读书,尤其喜欢 Thomas H. Cormen 的文章.粟粟家中有一个 R行C 列的巨型书架,书架的每一个位置都摆有一本书,上数第i 行.左数第j 列摆放的书有Pi,j页厚

[codevs 1306]广播操的游戏(Trie)

题目:http://codevs.cn/problem/1306/ 分析:题意一看就知道就是要求Trie有多少个节点.但是如果每次单独取原串的所有子串加入Trie会超时,为什么呢?比方说AAABBBCCC,假设这样的一些串,A,AB,ABB,ABBB,ABBBC,ABBBCC,ABBBCCC,如果单独加入,那么它们的前缀都要重新查找,很浪费时间.考虑子串[l,r]和[l,r+1],完全可以在弄完[l,r]后继续第r+1个字符,就弄完了[l,r+1]. 具体的,按一定的顺序取子串: [1,1] [