Codeforces 633C Spy Syndrome 2 | Trie树裸题

一个由许多空格隔开的单词组成的字符串,进行了以下操作:把所有字符变成小写,把每个单词颠倒过来,然后去掉单词间的空格。已知操作后的字符串以及可能出现的所有单词,请输出原字符串(多组解只输出一个)。

我犯的错误:数组的trie树……如果根节点是1……则其余节点要从2开始啊啊啊

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define space putchar(' ')
#define enter putchar('\n')
#define INF 0x3f3f3f3f
template <class T>
void read(T &x){
char c;
bool op = 0;
while(c = getchar(), c < '0' || c > '9')
if(c == '-') op = 1;
x = c - '0';
while(c = getchar(), c >= '0' && c <= '9')
x = x * 10 + c - '0';
if(op) x = -x;
}
template <class T>
void write(T x){
if(x < 0) putchar('-'), x = -x;
if(x >= 10) write(x / 10);
putchar('0' + x % 10);
} const int N = 1001000;
int n, m, dp[N], pos[N], len[N], cnt = 1, stk[N], top;
char a[N], s[N];
struct node {
int son[26], id;
node(){
id = 0;
memset(son, 0, sizeof(son));
}
} trie[N];
char low(char c){
return c >= 'a' ? c : c - 'A' + 'a';
}
void insert(int id, char *s){
int now = 1;
len[id] = strlen(s);
for(int i = 0; i < len[id]; i++){
int c = low(s[i]) - 'a';
if(!trie[now].son[c]) trie[now].son[c] = ++cnt;
now = trie[now].son[c];
}
trie[now].id = id;
}
int main(){
read(n);
scanf("%s", a + 1);
read(m);
for(int i = 1; i <= m; i++){
pos[i] = pos[i - 1] + len[i - 1];
scanf("%s", s + pos[i]);
insert(i, s + pos[i]);
}
for(int i = 1; i <= n; i++){
dp[i] = -1;
int now = 1;
for(int j = 0; i - j > 0 && now; j++){
now = trie[now].son[a[i - j] - 'a'];
if(trie[now].id && dp[i - j - 1] != -1){
dp[i] = trie[now].id;
break;
}
}
}
for(int i = n; i > 0; i -= len[dp[i]])
stk[++top] = dp[i];
for(int i = top; i; i--){
for(int j = 0; j < len[stk[i]]; j++)
putchar(s[pos[stk[i]] + j]);
putchar(' ');
}
enter;
return 0;
}

Codeforces 633C Spy Syndrome 2 | Trie树裸题的更多相关文章

  1. Codeforces 633C Spy Syndrome 2 【Trie树】+【DFS】

    <题目链接> 题目大意:给定一个只有小写字母组成的目标串和m个模式串(里面可能有大写字母),记目标串反过来后的串为S,让你从m个模式串中选出若干个组成S串(不区分大小写).输出任意一种方案 ...

  2. codeforces 633C. Spy Syndrome 2 hash

    题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  3. [codeforces] 633C Spy Syndrome 2

    原题 Trie树+dp 首先,我们可以简单的想到一种dp方式,就是如果这一段可以匹配并且可以与前一段接上,那么更新dp[i]为当前字符串的编号,然后倒推就可以得到答案. 但是,显然我们不能O(m)比较 ...

  4. Codeforces 633C Spy Syndrome 2(DP + Trie树)

    题目大概说给一个加密的字符串,加密规则是把原文转化成小写字母,然后各个单词反转,最后去掉空格.现在给几个已知的单词,还原加密的字符串. 和UVa1401一个道理.. 用dp[i]表示加密字符前i个字符 ...

  5. CF633C Spy Syndrome 2 trie树

    这个模型以前绝对见过,模拟赛的时候开始敲了一个AC自动机,纯属脑抽~ code: #include <bits/stdc++.h> #define N 5000006 #define NN ...

  6. HDU 1251 Trie树模板题

    1.HDU 1251 统计难题  Trie树模板题,或者map 2.总结:用C++过了,G++就爆内存.. 题意:查找给定前缀的单词数量. #include<iostream> #incl ...

  7. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  8. poj3630 Phone List (trie树模板题)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26328   Accepted: 7938 Descr ...

  9. HDU 1251 统计难题 (Trie树模板题)

    题目链接:点击打开链接 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单 ...

随机推荐

  1. X509证书申请以及PKCS#10 详解

    一.证书颁发 1.单证书的签发 1) 用户填写信息注册(或者由RA的业务操作员注册用户). 2) 用户信息传递到RA. 3) RA审核通过. 4) 用户请求发证. 5) RA审核通过. 6) 用户签发 ...

  2. 一个可以自由存取的onedriver

    https://cittedu-my.sharepoint.com/personal/jostin_5gd_me/Documents/jostin

  3. Docker容器的启动与停止

    启动docker:systemctl start docker 停止docker:systemctl stop docker 重启docker:systemctl restart docker 查看d ...

  4. JetBrains激活 PyCharm | IntelliJ IDEA | CLion | WebStorm...

    最近,JetBrains的IDE火了起来,身为学Java的人,放弃了Eclipse,选择了Idea,还真有点不舍得呢... 虽然Idea不错(在我看来,比Eclipse好用),但是,人家是收费的呀.. ...

  5. 别再犯低级错误,带你了解更新缓存的四种Desigh Pattern

    在我们使用分布式缓存Redis或者Memcached编写更新缓存数据代码时,我们总是会犯一个逻辑错误.先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中.试想,两个并发操作,一个是更新操 ...

  6. 安装keystone时创建用户失败

    系统:centos7.3 版本:openstack ocata 1.问题描述 安装keystone在创建用户时报错: The request you have made requires authen ...

  7. Spring Data REST PATCH请求远程代码执行漏洞(CVE-2017-8046) 本地复现方法

      #1背景 Spring Data REST是Spring Data项目的一部分,可以轻松地在Spring Data存储库之上构建超媒体驱动的REST Web服务. 恶意的PATCH请求使用精心构造 ...

  8. 亚马逊如何变成 SOA(面向服务的架构)

    . 亚马逊公司不仅是世界最大的网络书店,还是世界最大的云服务商.它是怎么实现从电商到云商的转变呢? 一切都是CEO杰夫·贝索斯促成的,他对市场有着超乎常人的理解和预见. 2. 2000年前后,贝索斯有 ...

  9. Grunt 5分钟上手:合并+压缩前端代码

    Grunt 的各种优点这里就不扯了,对于 新手来说 合并(concat) + 压缩(uglify) 前端代码的需求量应该是最大的,这里以这俩种功能为主做一个5分钟的入门吧! 工作环境 $ node - ...

  10. Scrum Meeting 10.27

    1.会议内容: 姓名 今日任务 明日任务 预估时间(h) 徐越 配置SQLserver 学习本地和服务器之间的通信 4 卞忠昊 找上届代码的bug 学习安卓布局(layout)的有关知识,研究上届学长 ...