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. 22-reverseString-Leetcode

    思路:so easy class Solution { public: string reverseString(string s) { int n = s.size(); for(int i=0;i ...

  2. C#表格,表格信息、GridView使用。

    page: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="test1.a ...

  3. 日常Java 2021/10/4

    读取控制台输入 将System.in包装在BufferedReader对象中来创建一个字符流 BufferedReader b = new BufferedReader(new InputStream ...

  4. vue-baidu-map相关随笔

    一,使用vue-baidu-map 1.下载相关包依赖 npm i vue-baidu-map   2.在main.js中import引入相关包依赖,在main.js中添加如下代码: import B ...

  5. Linux学习 - 条件判断

    一.判断格式 test -e /root/install.log 或 [ -e /root/install.log ] 使用echo $?查看是否正确,当返回0时表示返回正确 1 按照文件类型进行判断 ...

  6. oracle 日期语言格式化

    TO_DATE ('17-JUN-87', 'dd-mm-yy', 'NLS_DATE_LANGUAGE = American')

  7. Lock锁的使用

    在Java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5后新增的ReentrantLock类同样可达到此效果,且在使用上比synchronized更加灵活. 观 ...

  8. Windows下搭建FFmpeg开发调试环境

    背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可. 但是如果你想调试FFmpeg内部相关的逻辑,或 ...

  9. 03 - Vue3 UI Framework - 首页

    顶部边栏做完了,接下来开始做官网的首页 返回阅读列表点击 这里 创建视图文件夹 让我们先新建一个 src/views 文件夹,用来存放官网的主要视图 然后在该文件夹下新建两个 vue 文件,作为我们的 ...

  10. 『学了就忘』Linux服务管理 — 76、RPM包安装的服务管理

    目录 1.独立服务的启动管理 2.独立服务的自启动管理 方式一: 方式二:(推荐) 方式三: 3.验证 1.独立服务的启动管理 (1)使用/etc/init.d/目录中的启动脚本启动服务(推荐) [r ...