你一直受雇于一个超级氪的组织者因素比赛中参赛者
28日 引用>
有很高的精神和身体的能力。在一节比赛的参赛者在
测试他们的回忆能力已读取的字符sequenace测验他们的主人。许多
的选手非常善于识别模式。因此,为了增加一些困难
这个测试,组织者决定序列包含特定类型的重复子序列
不应使用。然而,他们不希望删除所有重复的子序列,因为在
这种情况下没有一个角色可以被重复。这本身会使这个问题太简单了
参赛者。相反,它是决定消除所有序列包含一个发生的两个相邻
相同的子序列。序列包含这样一个事件将被称为“容易”。其他序列
将被称为“硬”。例如,
ABACBCBAD序列是很容易的,因为它包含一个毗邻
子序列CB的重复。其他的例子简单的序列是:
?BB
?ABCDACABCAB
?ABCDABCD
硬序列的例子有:
?D
?直流
?ABDAB
?CBABCBA
为了提供测试主与一个潜在的无限来源的问题你问
编写一个程序,将从标准输入读取输入行,并写入到标准输出。输入
每个输入行包含整数n和L(依次),其中n比;L 0 L是在1≤≤26。
输入终止一行包含两个0。
输出为每个输入行打印出第n个硬序列(由字母来自第一个L
的字母),增加字母顺序(按字母顺序排序对应正常
排序中遇到一个字典),(下一行),序列的长度。
第一序列在这个顺序是“A”。你可能会认为对于给定n和L至少存在有n
硬序列。
这样一个序列可能是很长,把它分为四组(4)字符
一个空格隔开。如果有超过16这样的团体,请为17组开始一个新行。
程序可能承担的最大序列长度为80。
为例,用L=3,第一个7硬盘序列是:
AB
ABA
ABAC
马尼拉麻
ABACAB
ABACABA
示例输入7
3
30 3
0 0
示例输出ABAC ABA
7
ABAC ABCA CBAB卡巴课程ACBA卡巴
大致的题意:就是你要输入一个n和L,分别代表前L个字母输出第n个小的困难的串,而困难的串就是其中没有连续重复的字符串
利用的方法就是回溯法
<代码> # include<比特/stdc + + .h> 使用名称空间性病; int[100],问; 整数n, L; int dfs (int cur) {//输出当前的序列//判断的条件是问为n也就是第n个小的序列 如果(cnt + +==n) {//坏蛋是当前坐标长度 (int i=0; i<,坏蛋,我+ +){//注意格式 printf (" % c, A + S[我]); 如果我% 64==63,,我!=cur-1) printf (" \ n "); else if(我% 4==3,,我!=cur-1) printf (" "); }//输出长度 printf (" \ n % d \ n ", cur); 返回0; }//接下来的内容就是判断当前字符串是不努力是序列 for (int i=0; i祝辞n>的在L,,(n !=0,,L !=0)) { 问=0; dfs (0); } 返回0; } 代码> >之前 【129】Uva氪因子(困难的串)