返回小组 开始 2021-07-28 08:00:00

202107第三轮测试(J)

结束 2021-07-28 12:00:00
Contest is over.
当前 2024-09-20 01:04:56

B. 远古的密码-3

描述

大约在公元前700年,古希腊军队使用一种叫做scytale的圆木棍来进行保密通信。其使用方法是这样的:把长带子状羊皮纸缠绕在圆木棍上,然后在上面写字;解下羊皮纸后,上面只有杂乱无章的字符,只有再次以同样的方式缠绕到同样粗细的棍子上,才能看出所写的内容。快速且不容易解读错误的优点,使它在战场上大受欢迎。但它的缺点就是很容易被破解。

这种密码的一种最简单情况是,有固定长度的多个字符串ai,共n个,现在需要将他们拼接成能够识别的单词。

可以假设a1是单词的前半部分,ak是单词的后半部分,只需要将a1和ak连接在一起,就可以得到完整的单词。当然,也有可能是ak为单词前半部分,a1是单词后半部分。现在我们知道以下几条信息:

(1)一共需要拼接m个单词。
(2)第一个需要拼接单词片段一定是a[1],但a[1]是前半部分还是后半部分?另一部分在哪里?这些都需要你去寻找。
(3)现在知道其中一个完整的单词,但不知道它包含的片段a[i]是哪个。它可能由a[1]+a[n-m+1]组成,或者a[2]+a[n-m+2],......,也可能是a[3]+a[n-m+3]。拼接的顺序也不确定,可能是a[1]+a[n-m+1],也可能是a[n-m+1]+a[1]。
(4)因为字符串之间有很多干扰信息,所以k≠m+1。但可以保证,需要拼接的字符串是 a[1],a[2],......,a[m]和a[n-m+1],a[m-m+2],......,a[n],即需要拼接的字符串是从第一个开始,连续的前m个,以及从n-m+1开始最后的m个。
(5)对于拼接顺序,所有单词都是一致的。也就是说,如果第一个单词是a[1]+a[n-m+1],则后面拼接的规则为 a[2]+a[n-m+2],......,a[m]+a[n]。如果第一个单词是a[n-m+1]+a[1],则后面拼接的规则为 a[n-m+2]+a[2],......,a[n]+a[m].

现在给定n个字符串,需要拼接的字符数目m,和一个已知的完整单词。请按顺序输出所有拼接后的单词。

比如

n=7,m=3,完整单词为almost,a[i]为

ice

ap

ost

age

adv

che

alm

通过匹配,我们知道a[7]+a[3]="almost",根据m=3,我们就知道另外两个a[6]+a[2]="always", a[5]+a[1]="advice"。a[4]是干扰信息,不需要解密。按顺序输出为:

advice

cheap

almost

输入

第一行为两个正整数n和m,用空格隔开。 第二行为一个完整的单词。 第三行至n行,为需要拼接候选单词片段。

输出

按顺序输出m行,每一行为一个完整的单词。

样例

输入

7 3
almost
ice
ap
ost
age
adv
che
alm

输出

advice
cheap
almost

输入

6 2
because
cycl
bec
slow
old
ing
ause

输出

cycling
because

输入

5 2
floret
flo
flo
flo
ral
ret

输出

floral
floret

提示

单个单词的长度不超过20。

0≤m< n ≤20,


Submit

登录

注册
时间限制 1 秒
内存限制 128 MB
提交