2、Tavan
描述
小 Zeljko 一直在阁楼里读他奶奶的旧信, 并且发现了一个长度为 N 的单词 。
不幸的是,由于溢出的墨水,他不知道单词的内容。他把看不清的 M 个字母每个字母都用一个字符'#' 替换后,在一张纸上重写了这个词。他把那张纸递给了他的奶奶 , 对于每个看不清的字母 , 奶奶给了他 K 个不同的可能 。 在那之后 ,Zeljko 在笔记本中写下了所有可能的单词,并决定仔细查看他们的属性,以确定原始单词是什么。在看到笔记本上写下的单词后,他的奶奶意识到他们正在
寻找的是按字典序排列的第 X 个单词。Zeljko 在他们学校学习字母表的那天生
病了,所以他要求你帮助他确定原来的单词。
输入
第一行输入包含整数 N,M ,K 和 X (1 ≤N ≤ 500,1 ≤ M ≤N ,1 ≤K ≤ 26,1 ≤X ≤)。分别表示单词的长度,看不清的字母数量,奶奶给出的字母的数量和原单词是字典序的第几个。
第二行输入包含一个长度为 N 的字符串,由小写英文字母和字符' #' 组成 。
表示 Zeljko 找到的单词,其中字符'#' 表示看不清的字母。
接下来 M 行中的每一行包含一个长度为 K 的字符串, 由 K 个不同的小写英文
字母组成。第 2+i 行的 K 个字母表示第 i i 个看不清的字母的K种可能。
保证 X 总是小于等于能构造出的单词的总数。
输出
输出一个字符串。表示原本的单词。
分数分布
对于 30% 的数据,M=1 并且 K=3 。
对于另外 30% 的数据, M=1 。
样例输入 1
9 2 3 7
po#olje#i
sol
znu
样例输出 1
posoljeni
样例输入 2
4 1 2 2
#rak
zm
样例输出 2
zrak
思路
之前用类似于递归的方法做错了只得了60分,后来改的时候就用循环代替实现
其实就是以k值和m值为基础的方案数的寻找
错误代码(又臭又长又耗时还错)