Tire树模板-于是他错误的点名开始了
题目背景
XS中学化学竞赛组教练是一个酷爱炉石的人。
他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900)。
题目描述
这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名。(为什么不直接不让他玩炉石。)
输入输出格式
输入格式:
第一行一个整数 n,表示班上人数。接下来 n 行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过 50)。第 n+2 行一个整数 m,表示教练报的名字。接下来 m 行,每行一个字符串表示教练报的名字(只含小写字母,且长度不超过 50)。
输出格式:
对于每个教练报的名字,输出一行。如果该名字正确且是第一次出现,输出“OK”,如果该名字错误,输出“WRONG”,如果该名字正确但不是第一次出现,输出“REPEAT”。(均不加引号)
输入输出样例
5
a
b
c
ad
acd
3
a
a
e
OK
REPEAT
WRONG
说明
对于 40%的数据,n≤1000,m≤2000;
对于 70%的数据,n≤10000,m≤20000;
对于 100%的数据, n≤10000,m≤100000。
题解:
依旧是tire树裸题
但表示RE了无数次之后,终于意识到一定要把数组开到足够大(在题目允许的情况下)
小技巧:判断重复查询时,对单词结尾进行一个小改动(详见代码)
1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<cmath>
5 #define ll long long
6 #include<cstring>
7 #include<string>
8 #define DB double
9 using namespace std;
10 char s[600000];
11 int t[900000][30];
12 int tot,n,Q;
13 int v[9000000],fg;
14 void ins()
15 {
16 int l=strlen(s+1);
17 int now=0;
18 for(int i=1;i<=l;++i)
19 {
20 int k=s[i]-'a'+1;
21 if(!t[now][k]) t[now][k]=++tot;
22 now=t[now][k];
23 }
24 v[now]=1;
25 }
26 int query()
27 {
28 int cnt=0,now=0,l=strlen(s+1);
29 for(int i=1;i<=l;++i)
30 {
31 int k=s[i]-'a'+1;
32 if(t[now][k]) now=t[now][k];
33 else return 0;
34 }
35 if(!v[now]) return 0;
36 if(v[now]==1)
37 {
38 v[now]++;
39 return 1;
40 }
41 return 2;
42 }
43 int main()
44 {
45 scanf("%d",&n);
46 for(int i=1;i<=n;++i)
47 {
48 scanf("%s",s+1);
49 ins();
50 }
51 scanf("%d",&Q);
52 while(Q--)
53 {
54 scanf("%s",s+1);
55 fg=query();
56 if(fg==0) puts("WRONG");
57 if(fg==1) puts("OK");
58 if(fg==2) puts("REPEAT");
59 }
60 return 0;
61 }
疾风怒雨,禽鸟戚戚;霁日光风,草木欣欣。
Tire树模板-于是他错误的点名开始了的更多相关文章
- KMP+Tire树(模板)
\(\color{Red}{KMP板子}\) #include <bits/stdc++.h> using namespace std; const int maxn=1e6+9; int ...
- Tire树总结(模板+例题)
题目来自<算法竞赛设计指南> Tire树是一种可以快速查找字符串的数据结构 模板 #include<cstdio> #include<algorithm> #inc ...
- LUOGU P2580 于是他错误的点名开始了(trie树)
传送门 解题思路 trie树模板
- luogu P2580 于是他错误的点名开始了
luogu P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
- 于是他错误的点名开始了 [Trie]
于是他错误的点名开始了 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已 ...
- hdu1754 I hate it线段树模板 区间最值查询
题目链接:这道题是线段树,树状数组最基础的问题 两种分类方式:按照更新对象和查询对象 单点更新,区间查询; 区间更新,单点查询; 按照整体维护的对象: 维护前缀和; 维护区间最值. 线段树模板代码 # ...
- Tire树简介
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种. 典型应用:用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 它的优点是:利用字符串的公共 ...
- Tire树(字典树)
from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...
- HDU3948 & 回文树模板
Description: 求本质不同回文子串的个数 Solution: 回文树模板,学一学贴一贴啊... Code: /*================================= # Cre ...
随机推荐
- CF650A Watchmen(STL+map)
目录 CF650A Watchmen 1. 手推公式 2.算法 3.优化 4.补充 CF650A Watchmen 只有三个map的一篇题解 1. 手推公式 \(|x2-x1|+|y2-y1|=\sq ...
- []转帖]linux 上修改了nginx.conf 怎么重新加载配置文件生效
linux 上修改了nginx.conf 怎么重新加载配置文件生效 https://www.cnblogs.com/zhuyeshen/ 步骤如下先利用/usr/local/nginx/sbin/ng ...
- 再谈PG索引-存储架构
1.索引的基本架构 PG的索引是B+树,B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点指针进行连接: meta ...
- 【洛谷p1781】宇宙总统
宇宙总统[题目链接] 关于题目算法,其实就是考排序,那我们直接sort不就好啦,显然不能. 这个题让我重新认识了cmp函数: 以下是我的心路历程: 看到这个题,嗯?这么简单的吗,我直接sort不就好啦 ...
- laravel5.5入门-安装和认证
一.安装 在终端CMD里切换到你想要放置该网站的目录下(如 d:\project\laravel),运行命令 composer create-project laravel/laravel learn ...
- python pycharm 注册码
D87IQPUU3Q-eyJsaWNlbnNlSWQiOiJEODdJUVBVVTNRIiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...
- 通过yum安装maven
安装maven wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/y ...
- zuul开发实战(限流,超时解决)
什么是网关 API Gateway,是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求.鉴权.监控.缓存.限流等功能 统一接入 * 智能路由 * AB测试.灰度测试 ...
- vue-cli常用插件安装教程
1.安装sass npm i sass-loader node-sass --save-dev 2.安装stylus cnpm install stylus --save-dev cnpm insta ...
- 69. Sqrt(x) (JAVA)
Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a no ...