【UOJ #13】【UER #1】跳蚤OS
http://uoj.ac/problem/13
建立trie树,然后建立go指针,
和AC自动机里的fail指针差不多,
走到一个快捷方式就从go指针走。
注意在trie树上要保留字符'/',不能用end标记来标识一个字符串的结束。
因为可能出现"/Iam/zz"和"/Iamzz"这两种情况,如果只用end标记,tire树上这两个字符串就会共用一条路径。
(总之是蒟蒻才会犯的错误,神犇们勿喷_(:з」∠)_)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int in() {
int k = 0; char c = getchar();
for(; c < '0' || c > '9'; c = getchar());
for(; c >= '0' && c <= '9'; c = getchar())
k = k * 10 + c - 48;
return k;
}
struct State {
int num;
State *nxt[27], *go, *fa;
State(State *_fa, int _num) {
memset(nxt, 0, sizeof(nxt));
go = 0; fa = _fa; num = _num;
}
} *root;
State *to(char *c) {
int len = strlen(c), x;
if (len == 1 && c[0] == '/') return root;
State *tmp = root;
for(int i = 0; i < len; ++i) {
if (c[i] == '/') x = 26;
else x = c[i] - 'a';
if (tmp->nxt[x] == 0)
tmp->nxt[x] = new State(tmp, x);
tmp = tmp->nxt[x];
if ((c[i + 1] == '\0' || c[i + 1] == '/') && tmp->go)
tmp = tmp->go;
}
return tmp;
}
char s[500003], t[500003];
void print(State *tmp) {
int tot = 0;
if (tmp == root) {puts("/"); return;}
while (tmp != root) {
if (tmp->num <= 25) t[++tot] = 'a' + tmp->num;
else t[++tot] = '/';
tmp = tmp->fa;
}
while (tot) putchar(t[tot--]);
puts("");
}
int n, m;
int main() {
root = new State(0, 0);
n = in(); m = in();
for(int i = 1; i <= n; ++i) {
scanf("%s", s); scanf("%s", t);
to(s)->go = to(t);
}
for(int i = 1; i <= m; ++i) {
scanf("%s", s);
print(to(s));
}
return 0;
}
【UOJ #13】【UER #1】跳蚤OS的更多相关文章
- 【UER #1】[UOJ#12]猜数 [UOJ#13]跳蚤OS [UOJ#14]DZY Loves Graph
[UOJ#12][UER #1]猜数 试题描述 这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 n. 小D是个机灵鬼,很快从小Y嘴里套出了 n的值.然后 ...
- 【UER #1】跳蚤OS(Trie)
跳蚤OS 是跳蚤国自主研发的功能强大的操作系统. 跳蚤OS的文件系统与普通的文件系统类似,是个文件夹套文件夹的结构.文件系统根目录称为“//”.我们可以用文件路径来表明文件所在的位置,比如“/flea ...
- UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
题目链接 http://uoj.ac/contest/47/problem/455 题解 模拟费用流,一个非常神奇的东西. 本题即为WC2019 laofu的讲课中的Problem 8,经典的老鼠进洞 ...
- [UOJ#245][UER#7]天路(近似算法)
允许5%的相对误差,意味着我们可以只输出$\log_{1.05} V$种取值并保证答案合法.并且注意到答案随着区间长度而单增,故取值不同的答案区间是$O(\log_{1.05} V)$的. 于是初始x ...
- 【UOJ Easy Round #1】
数论/Trie/并查集 猜数 这题我是这样分析的…… $a*b=g*l=n=k^2 \ and \ (g|a,g|b) \Rightarrow (g*a')*(g*b' )=g*l=k^2 \\ \R ...
- Python os模块介绍
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curd ...
- (原创)Python文件与文件系统系列(2)——os模块对文件、文件系统操作的支持
os模块的功能主要包括文件系统部分和进程管理部分,这里介绍其中与文件系统相关的部分. 当请求操作系统执行操作失败时,os模块抛出内置异常 exceptions.OSError 的实例,可以通过 os. ...
- python3之OS与sys模块
一.Python os模块 包含普遍的操作系统功能,如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的. 1.os.access() 查看文件是否有指定权限,有则返回True否则返回flase ...
- 从安装Mac OS X虚拟机到第一个IOS程序
对于纯粹地抄这种行为是比较抵触的,别人已经写得挺好的东西没必要又去写一遍,但如果不写经验来看下次再做时自己又要重复百度筛选一遍,所以还是要记一记. 之前要获取IOS静态库的版本,但一直以来没有Mac没 ...
随机推荐
- iOS之2016面试题二
前言 招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深.本篇文章为群里的小伙伴们去要出发公司的笔试题,由笔者整理并提供笔者个人参考 ...
- AJAX请求详解 同步异步 GET和POST
AJAX请求详解 同步异步 GET和POST 上一篇博文(http://www.cnblogs.com/mengdd/p/4191941.html)介绍了AJAX的概念和基本使用,附有一个小例子,下面 ...
- 动态计算UITableViewCell高度
动态计算UITableViewCell高度 UILabel in UITableViewCell Auto Layout - UILabel的属性Lines设为了0表示显示多行.Auto Layout ...
- 深入剖析通知中心和KVO
深入剖析通知中心和KVO 要先了解KVO和通知中心,就得先说说观察者模式,那么观察者模式到底是什么呢?下面来详细介绍什么是观察者模式. 观察者模式 -A对B的变化感兴趣,就注册成为B的观察者,当B发生 ...
- IOS开发之功能模块--输入框随着键盘的位置移动而移动
废话不多说,先直接上效果图: 先熟悉一下在Cocoa框架中会用到的key键: 然后直接上Demo的源码截图: 看代码之前,补充说一句,Demo中的文本框以及文本框的背后灰色的View是通过storyb ...
- SqlServer-- NULL空值处理
数据库中,一个列如果没有指定值,那么值就为null,数据库中的null表示"不知道",而不是表示没有.因此select null+1结果是null,因为"不知道" ...
- ORA-27125: unable to create shared memory segment
平台环境 : Oracle Linux Server release 5.7 x86_64 数据库版本 : Oracle Database 10g Enterprise Edition Rel ...
- PHP笔记(CSS篇)
HTML常用于在网页中显示内容,当然,还可以是布局,但是比较不方便,所以,引进了CSS CSS全称Cascading Style Sheets,中文名:层叠样式表 帮助文档:CSS.chm 作用:布局 ...
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- openstack想说爱你不容易
网上一牛人的博客专门写的是关于openstack的,看晕了.先收藏下.猛击下面的地址 http://www.cnblogs.com/popsuper1982/