C. Spy Syndrome 2
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

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:

  1. Convert all letters of the sentence to lowercase.
  2. Reverse each of the words of the sentence individually.
  3. 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.

Input

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.

Output

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.

Examples
input
30
ariksihsidlihcdnaehsetahgnisol
10
Kira
hates
is
he
losing
death
childish
L
and
Note
output
Kira is childish and he hates losing 
input
12
iherehtolleh
5
HI
Ho
there
HeLLo
hello
output
HI there HeLLo 
Note

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的更多相关文章

  1. Codeforces 633C Spy Syndrome 2 | Trie树裸题

    Codeforces 633C Spy Syndrome 2 | Trie树裸题 一个由许多空格隔开的单词组成的字符串,进行了以下操作:把所有字符变成小写,把每个单词颠倒过来,然后去掉单词间的空格.已 ...

  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. CF#633C Spy Syndrome 2 DP+二分+hash

    Spy Syndrome 2 题意 现在对某个英文句子,进行加密: 把所有的字母变成小写字母 把所有的单词反过来 去掉单词之间的空格 比如:Kira is childish and he hates ...

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

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

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

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

  6. [codeforces] 633C Spy Syndrome 2

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

  7. 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 ...

  8. Manthan, Codefest 16 -C. Spy Syndrome 2

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  9. Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp

    C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...

随机推荐

  1. Leetcode中的SQL题目练习(二)

    175. Combine Two Tables https://leetcode.com/problems/combine-two-tables/description/ Description Pe ...

  2. Scala(八)【面向对象总结】

    面向对象总结 面向对象 1.scala包 1.声明包 1.在文件第一行通过package 包名 2.package 包名{ .... } 第二种方法,包名只能在target目录才能看到 2.导入包 1 ...

  3. 【TCP/IP】之Java socket编程API基础

    Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助, 此文讲解Socket的基础编程.Socket用法:①.主要用在进程间,网络间通信. 文章目录如下: ...

  4. Redis数据类型内部编码规则及优化方式

    Redis的每个键值都是使用一个redisObject结构体保存的,redisObject的定义如下: typedef struct redisObject { unsigned type:4; un ...

  5. 【Linux】【Basis】【Kernel】Linux常见系统调用

    一,进程控制 1)getpid,getppid--获取进程识别号 #include <sys/types.h> #include <unistd.h> pid_t getpid ...

  6. spring boot项目创建与使用

    概述 spring boot通常使用maven创建,重点在于pom.xml配置,有了pom.xml配置,可以先创建一个空的maven项目,然后从maven下载相关jar包. spring boot d ...

  7. 小程序中使用less(最优方式)

    写惯了less/sass,但是现在开发小程序缺还是css,很不习惯. 在网上搜的教程,要么是gulp,要么就是vscode的Easy-less的插件. 传统方式 我们来对比,这两种方式的优劣. Gul ...

  8. 【Java 基础】Arrays.asList、ArrayList的subList注意事项

    1. 使用Arrays.asList的注意事项 1.1 可能会踩的坑 先来看下Arrays.asList的使用: List<Integer> statusList = Arrays.asL ...

  9. Java RestTemplate传递参数

    最近使用Spring 的 RestTemplate 工具类请求接口的时候发现参数传递的一个坑,也就是当我们把参数封装在Map里面的时候,Map 的类型选择. 使用RestTemplate post请求 ...

  10. jQuery 的两种语法

    文档就绪事件(文档加载完成之后才执行jQuer代码): 第一种: $(document).ready(function() { // jQuery 代码.... }); 第二种: $(function ...