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 ...
随机推荐
- 构建LNMP+WordPress
1. 安装LNMP环境 首先修改主机名 [root@samba ~]# hostnamectl set-hostname lnmp[root@lnmp lnmp1.6-full]# hostnamec ...
- 学习java的第十一天
一.今日收获 1.学习java完全学习手册2.9.3循环结构的内容并验证例题 2.观看哔哩哔哩上的教学视频 二.今日问题 1.基本没有 三.明日目标 1.继续完成2.9.3循环结构的例题 2.哔哩哔哩 ...
- Scala(四)【集合基础入门】
目录 一.Array 二. List 三.Set 四.Tuple 五.Map 一.Array package com.bigdata.scala.day01 /** * @description: 不 ...
- 大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法
具体见第三阶段scala-day01中的文档(scala编程基础---基础语法) 1. 函数式编程(https://www.cnblogs.com/wchukai/p/5651185.html): ...
- 商业爬虫学习笔记day6
一. 正则解析数据 解析百度新闻中每个新闻的title,url,检查每个新闻的源码可知道,其title和url都位于<a></a>标签中,因为里面参数的具体形式不一样,同一个正 ...
- Linux系统中安装软件方法总结
Linux系统中安装软件方法总结 [1]Linux系统中安装软件的几种方式 [2] Linux配置yum源(本地源和网络源) [3] SuSE下zypper源配置 [4] SUSE zypper 本地 ...
- 转 【Android】- Android与html5交互操作
转自:https://blog.csdn.net/baidu_35701759/article/details/70314812 1. Android提供了WebView控件可访问网页 通过webVi ...
- k8s之ansible安装
项目地址:https://github.com/easzlab/kubeasz #:先配置harbor #:利用脚本安装docker root@k8s-harbor1:~# vim docker_in ...
- Linux基础命令---mysqldump数据库备份
mysqldump mysqldump是一个客户端的备份程序,他可以备份数据库,或者将数据库传输到另外一个服务器. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. ...
- java多线程 并发编程
一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...