Codeforce 633C. 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.
思路:暴力,字典树+DFS。感觉这题有点水过去的感觉。
说下我的思路,就是将下面给的单词到过来存进字典树中,然后用DFS正着搜。时间给了2s,140ms过的,也差点爆了内存
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<math.h>
6 #include<queue>
7 #include<map>
8 using namespace std;
9 typedef long long LL;
10 char str[10005];
11 char trr[10005];
12 char strr[1005];
13 char tt[100005][1001];
14 int BB;
15 struct node
16 {
17 node*p[26];
18 int id;//记录单词的标号
19 node()
20 {
21 id=-2;
22 memset(p,0,sizeof(p));
23 }
24 };
25 int N=0;
26 int ii[100005];
27 int rr[100005];
28 node *head=new node();
29 void inserts(struct node*r,char *q,int v)//字典树的添加
30 {
31 int i,j,l;
32 node*NN=r;
33 l=strlen(q);
34 for(i=l-1; i>=0; i--)
35 {
36 int s=tolower(q[i])-'a';
37 if(NN->p[s]==NULL)
38 {
39 node*n=new node();
40 NN->p[s]=n;
41 NN=n;
42 }
43 else
44 NN=NN->p[s];
45 if(i==0)
46 NN->id=v;
47 }
48 }
49 struct node*ask(char p,struct node*r)//查询,返回当前的节点
50 {
51 int i,j;
52 struct node*dd=r;
53 int s=p-'a';
54 return dd->p[s];
55 }
56 void dfs(int id,int l,int k,node*d)
57 {
58 if(N)return ;
59 int i;
60 char tr[10005];
61 if(id==l&&N==0)
62 {for(i=0;;i++)
63 {
64 if(ii[i])
65 {
66 rr[i]=ii[i];
67 }
68 else break;
69 }
70 N=1;
71 return ;
72 }node *WW;
73 for(i=id; i<l; i++)
74 {
75 if(N)return ;
76 tr[i-id]=str[i];
77 tr[i-id+1]='\0';
78 if(i==id)WW=head;
79 node *nn=ask(tr[i-id],WW);
80 if(nn==NULL)//如果没有符合的直接跳出
81 {
82 return ;
83 }
84 if(nn->id!=-2)//当符合了进入下一层
85 {
86 ii[k]=nn->id;
87 dfs(i+1,l,k+1,nn);
88 ii[k]=0;
89 } WW=nn;//继续按当前的前缀串查找
90 }
91 }
92 int main(void)
93 {
94 int i,j,k,s;
95 N=0,BB=0;
96 scanf("%d",&k);
97 scanf("%s",str);
98 scanf("%d",&s);
99 int ans=0;
100 for(i=1; i<=s; i++)
101 {
102 scanf("%s",tt[i]);
103 int l=strlen(tt[i]);
104 inserts(head,tt[i],i);
105 }
106 dfs(0,k,0,head);
107 for(i=0;;i++)
108 {
109 if(rr[i]==0)
110 {
111 break;
112 }
113 }
114 int sl=i-1;
115 printf("%s",tt[rr[0]]);
116 for(i=1; i<=sl; i++)
117 {
118 printf(" %s",tt[rr[i]]);
119 }
120 return 0;
121 }
Codeforce 633C. Spy Syndrome 2的更多相关文章
- Codeforces 633C Spy Syndrome 2 | Trie树裸题
Codeforces 633C Spy Syndrome 2 | Trie树裸题 一个由许多空格隔开的单词组成的字符串,进行了以下操作:把所有字符变成小写,把每个单词颠倒过来,然后去掉单词间的空格.已 ...
- codeforces 633C. Spy Syndrome 2 hash
题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- CF#633C Spy Syndrome 2 DP+二分+hash
Spy Syndrome 2 题意 现在对某个英文句子,进行加密: 把所有的字母变成小写字母 把所有的单词反过来 去掉单词之间的空格 比如:Kira is childish and he hates ...
- Codeforces 633C Spy Syndrome 2(DP + Trie树)
题目大概说给一个加密的字符串,加密规则是把原文转化成小写字母,然后各个单词反转,最后去掉空格.现在给几个已知的单词,还原加密的字符串. 和UVa1401一个道理.. 用dp[i]表示加密字符前i个字符 ...
- Codeforces 633C Spy Syndrome 2 【Trie树】+【DFS】
<题目链接> 题目大意:给定一个只有小写字母组成的目标串和m个模式串(里面可能有大写字母),记目标串反过来后的串为S,让你从m个模式串中选出若干个组成S串(不区分大小写).输出任意一种方案 ...
- [codeforces] 633C Spy Syndrome 2
原题 Trie树+dp 首先,我们可以简单的想到一种dp方式,就是如果这一段可以匹配并且可以与前一段接上,那么更新dp[i]为当前字符串的编号,然后倒推就可以得到答案. 但是,显然我们不能O(m)比较 ...
- Codeforce 633.C 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
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp
C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...
随机推荐
- 电脑盘符为什么从C盘开始?A盘和B盘去哪了?
虽然我们几乎每天都在跟电脑打交道,但是不知道大家有没有过疑惑,为什么电脑盘符是从C盘开始命名呢?有没有A盘和B盘??A盘和B盘去哪了??? 其实,A盘和B盘是真实存在的. 在早期的DOS时代,计算机的 ...
- 紧张 + 刺激,源自一次 OOM 历险
作者 | 蚂蝗 背景 Erda 是集 DevOps.微服务治理.多云管理以及快数据管理等多功能的开源一站式企业数字化平台.其中,在 DevOps 模块中,不仅有 CI/CD.项目协同等功能,同时还 ...
- day13 装饰器与语法糖
day13 装饰器与语法糖 一.装饰器 1.什么是装饰器 装饰器就是装饰别人的工具,具体是指为被装饰者添加新功能 装饰器->函数 被装饰者->函数 2.为何要用装饰器 装饰器的核心思想:( ...
- Java——数组的定义与使用
数组的定义与使用 1.数组的基本概念 (1)数组的动态初始化: 数组首先先开辟内存空间,而后再使用索引进行内容的设置,这种定义数组的方式称为动态初始化 数组是引用数据类型,存在有内存分配问题.在使用前 ...
- 视频框架 Vitamio使用
转自http://blog.csdn.net/u010181592/article/category/5893483 1.在https://github.com/yixia/VitamioBundle ...
- Linux学习 - shell脚本执行
一.shell概述 shell是一个命令行解释器,为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动.挂起.停止甚至是编写一些程序 shell还是一个功能强 ...
- Dubbo声明式缓存
为了进一步提高消费者对用户的响应速度,减轻提供者的压力,Dubbo提供了基于结果的声明式缓存.该缓存是基于消费者端的,所以使用很简单,只需修改消费者配置文件,与提供者无关 一.创建消费者07-cons ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(2. 配置NTP服务chrony)
1. 简介 1.1. 这次使用另外一个轻量级的NTP服务,chrony.这是openstack推荐使用的ntp服务. 1.2. 官方网站:https://chrony.tuxfamily.org/ 2 ...
- jquery:iframe里面的元素怎样触发父窗口元素的事件?
例如父窗口定义了一个事件. top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, ...
- 【Java 基础】 instanceof和isInstance区别详解
obj instanceof class 也就是说这个对象是不是这种类型, 1.一个对象是本身类的一个对象 2.一个对象是本身类父类(父类的父类)和接口(接口的接口)的一个对象 3.所有对象都是Obj ...