Codeforce 633.C Spy Syndrome 2
2 seconds
256 megabytes
standard input
standard output
After observing the results of Spy Syndrome, Yash realised the errors of his ways. He now believes that a super spy such as Siddhant can't use a cipher as basic and ancient as Caesar cipher. After many weeks of observation of Siddhant’s sentences, Yash determined a new cipher technique.
For a given sentence, the cipher is processed as:
- Convert all letters of the sentence to lowercase.
- Reverse each of the words of the sentence individually.
- Remove all the spaces in the sentence.
For example, when this cipher is applied to the sentence
Kira is childish and he hates losing
the resulting string is
ariksihsidlihcdnaehsetahgnisol
Now Yash is given some ciphered string and a list of words. Help him to find out any original sentence composed using only words from the list. Note, that any of the given words could be used in the sentence multiple times.
The first line of the input contains a single integer n (1 ≤ n ≤ 10 000) — the length of the ciphered text. The second line consists of nlowercase English letters — the ciphered text t.
The third line contains a single integer m (1 ≤ m ≤ 100 000) — the number of words which will be considered while deciphering the text. Each of the next m lines contains a non-empty word wi (|wi| ≤ 1 000) consisting of uppercase and lowercase English letters only. It's guaranteed that the total length of all words doesn't exceed 1 000 000.
Print one line — the original sentence. It is guaranteed that at least one solution exists. If there are multiple solutions, you may output any of those.
- 30
ariksihsidlihcdnaehsetahgnisol
10
Kira
hates
is
he
losing
death
childish
L
and
Note
- Kira is childish and he hates losing
- 12
iherehtolleh
5
HI
Ho
there
HeLLo
hello
- HI there HeLLo
In sample case 2 there may be multiple accepted outputs, "HI there HeLLo" and "HI there hello" you may output any of them.
题目大意:将一个字符串加密的规则:先将所有字母变成小写字母,再将每个单词翻转,拼接在一起.现在给出可能用到的单词,还原字符串.
分析:既然题干中说所有的单词都翻转过来了,那么就把它给出的单词全部翻转过来.之后就有点像是在一个字典中查询单词有没有出现过这种操作,利用trie.因为n不大,在匹配加密串的时候可以用搜索:固定起点,枚举终点,每次看在trie中能不能找到结尾标记以及能不能走下去.翻转操作可以变成倒着插入trie.
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int n, m, tot = , cnt, ans[], len[];
- char s[][], s2[];
- struct node
- {
- int tr[];
- int id;
- }e[];
- void insert(char *ss, int x)
- {
- int len = strlen(ss);
- int u = ;
- for (int i = len - ; i >= ; i--)
- {
- char ch = ss[i];
- if (ch < 'a' || ch > 'z')
- ch += 'a' - 'A';
- int p = ch - 'a';
- if (!e[u].tr[p])
- e[u].tr[p] = ++tot;
- u = e[u].tr[p];
- }
- e[u].id = x;
- }
- void solve(int dep)
- {
- if (dep == n + )
- {
- for (int i = ; i < cnt; i++)
- cout << s[ans[i]] << " ";
- cout << s[ans[cnt]] << endl;
- exit();
- }
- int u = ,i;
- for (i = dep; i <= n; i++)
- {
- int p = s2[i] - 'a';
- if (!e[u].tr[p])
- break;
- u = e[u].tr[p];
- if (e[u].id)
- {
- ans[++cnt] = e[u].id;
- solve(dep + len[e[u].id]);
- --cnt;
- }
- }
- }
- int main()
- {
- scanf("%d", &n);
- scanf("%s", s2 + );
- scanf("%d", &m);
- for (int i = ; i <= m; i++)
- {
- scanf("%s", s[i]);
- len[i] = strlen(s[i]);
- insert(s[i], i);
- }
- solve();
- return ;
- }
Codeforce 633.C Spy Syndrome 2的更多相关文章
- Codeforces 633 C Spy Syndrome 2 字典树
题意:还是比较好理解 分析:把每个单词反转,建字典树,然后暴力匹配加密串 注:然后我就是特别不理解,上面那种能过,而且时间很短,但是我想反之亦然啊 我一开始写的是,把加密串进行反转,然后单词正着建字典 ...
- Codeforce 633C. Spy Syndrome 2
C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp
C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...
- Manthan, Codefest 16 -C. Spy Syndrome 2
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- codeforces 633C. Spy Syndrome 2 hash
题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Codeforces 633C Spy Syndrome 2 | Trie树裸题
Codeforces 633C Spy Syndrome 2 | Trie树裸题 一个由许多空格隔开的单词组成的字符串,进行了以下操作:把所有字符变成小写,把每个单词颠倒过来,然后去掉单词间的空格.已 ...
- CF#633C Spy Syndrome 2 DP+二分+hash
Spy Syndrome 2 题意 现在对某个英文句子,进行加密: 把所有的字母变成小写字母 把所有的单词反过来 去掉单词之间的空格 比如:Kira is childish and he hates ...
- CF #Manthan, Codefest 16 C. Spy Syndrome 2 Trie
题目链接:http://codeforces.com/problemset/problem/633/C 大意就是给个字典和一个字符串,求一个用字典中的单词恰好构成字符串的匹配. 比赛的时候是用AC自动 ...
- CF633C:Spy Syndrome 2——题解
https://vjudge.net/problem/CodeForces-633C http://codeforces.com/problemset/problem/633/C 点击这里看巨佬题解 ...
随机推荐
- phpcms单页顶级栏目默认打开第一个子栏目方法
首先phpcms单页如过下面有子栏目,那么当前栏目是不能被编辑内容的,且访问后是没有内容的,首先不知道这是不是产品设计的一个缺陷,但是在使用过程中确实在后台也没有找到其他的对应解决办法,刚好在某QQ群 ...
- AndroidArchitecture
title: AndroidArchitecture date: 2016-04-08 23:26:20 tags: [architecture] categories: [Mobile,Androi ...
- 腾讯视频qlv格式转换MP4普通视频方法
QLV格式视频不是那么好对付的,似乎是一种加密格式,试着把.qlv改成.mp4或.flv都没有用,用格式工厂等转换软件转换也根本无法识别.但这并不意味着没有办法,其实真正的方法是不用任何工具: 1,我 ...
- 四种方式实现波浪效果(CSS效果)
一)第一种方法 (1)HTML结构 <body> <div class="animate wave"> <div class="w1&quo ...
- Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 03
此次作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2286 Scrum master:范洪达 一.小组介绍 组长:王一可 组员 ...
- Java中的抽象类abstract
abstract定义抽象类 abstract定义抽象方法,只需要声明,不需要实现 包含抽象方法的类是抽象类 抽象类中可以包含抽象方法,也可以包含普通方法 抽象类不能直接创建,可以定义父类引用变量指向子 ...
- OOP 2.1 类和对象的基本概念2
1.成员函数的另一种写法:类的成员函数和类的定义分开写 e.g. class rectangle { public: int w,h; int area(); int p(); void init(i ...
- CodeForces 483B 二分答案
题目: B. Friends and Presents time limit per test 1 second memory limit per test 256 megabytes input s ...
- 01_Java基础_第1天(Java概述、环境变量、注释、关键字、标识符、常量)_讲义
今日内容介绍 1.Java开发环境搭建 2.HelloWorld案例 3.注释.关键字.标识符 4.数据(数据类型.常量) 01java语言概述 * A: java语言概述 * a: Java是sun ...
- mui.ajax与服务器(SpringMVC)传输json数据
跨域问题 PC端为了安全,所以禁止跨域.而我使用mui做移动web时,难免会使用pc浏览器进行调试.mui.ajax是允许跨域的.为了可以调试成功,需要对浏览器进行设置及.以360急速浏览器为例,设置 ...