Krypton Factor

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 392    Accepted Submission(s): 174

Problem Description
You have been employed by the organisers of a Super Krypton Factor Contest in which contestants have very high mental and physical abilities. In one section of the contest the contestants are tested on their ability to recall a sequenace of characters which has been read to them by the Quiz Master. Many of the contestants are very good at recognising patterns. Therefore, in order to add some difficulty to this test, the organisers have decided that sequences containing certain types of repeated subsequences should not be used. However, they do not wish to remove all subsequences that are repeated, since in that case no single character could be repeated. This in itself would make the problem too easy for the contestants. Instead it is decided to eliminate all sequences containing an occurrence of two adjoining identical subsequences. Sequences containing such an occurrence will be called ``easy''. Other sequences will be called ``hard''. 

For example, the sequence ABACBCBAD is easy, since it contains an adjoining repetition of the subsequence CB. Other examples of easy sequences are: 

BB
ABCDACABCAB
ABCDABCD 

Some examples of hard sequences are: 

D
DC
ABDAB
CBABCBA

Input

In order to provide the Quiz Master with a potentially unlimited source of questions you are asked to write a program that will read input lines that contain integers n and L (in that order), where n > 0 and L is in the range , and for each input line prints out the nth hard sequence (composed of letters drawn from the first L letters in the alphabet), in increasing alphabetical order (alphabetical ordering here corresponds to the normal ordering encountered in a dictionary), followed (on the next line) by the length of that sequence. The first sequence in this ordering is A. You may assume that for given n and L there do exist at least n hard sequences. 

For example, with L = 3, the first 7 hard sequences are: 


AB 
ABA 
ABAC 
ABACA 
ABACAB 
ABACABA 
As each sequence is potentially very long, split it into groups of four (4) characters separated by a space. If there are more than 16 such groups, please start a new line for the 17th group. 

Therefore, if the integers 7 and 3 appear on an input line, the output lines produced should be 

ABAC ABA
7
Input is terminated by a line containing two zeroes. Your program may assume a maximum sequence length of 80.

Sample Input


30 30 0

Sample Output


ABAC ABCA CBAB CABA CABC ACBA CABA28

Source


问题简介:

 输入正整数n和L,输出由前L个字符组成的、字典顺序第n小的不含相邻重复字串的字符串。不含相邻重复字串的字符串是指,一个字符串中,任意两个相邻的字串都不相等。输出结果时,对于找到的字符串,每4个字符间加入一个空格,每行输出80个字符。

思路分析:

大致的框架就是每次增加一个字符,在增加字符的同时去判断加上这个字符后是否产生了连续的相同子串,这也是很关键的一个点,如何判断是否产生了连续的相同子串,由于采用了回溯的思想,故以前的串是没有连续的相同子串的,故只需从后向前看包含了新字母后有无连续的相同子串。我们可以外层循环去遍历两个子串的长度,从1-(cur+1)/2(即当前串的一半),内层循环去遍历每一对子串的对应的点,如果在内层循环找到了一个点在两个子串上的对应位置不相等,则在此长度下没有产生连续的相同子串。于是,外层循环的长度加1,去判断下一个子串是否相同。如果找到了某一对连续的相同子串,则此次的分配不合理,尝试在该点分配下一个小于L的字母,如果没有找到一对连续的相同子串,则此次分配合理,可以递归下一个点,并且记录困难子串的变量加一。当变量等于n的时候则输出该序列即可。 由于无需返回值,所以直接return 即可。

package lianxi;

import java.util.Scanner;

public class KryptonFactorUva129 {
static Scanner scan = new Scanner(System.in);
static int C[]=new int [10000];
static int n,l,count=0;
public static void main(String[] args) {
while(scan.hasNext()){
n = scan.nextInt();
l = scan.nextInt();
getFactor(0);
for(int i=0;i<C.length;i++){
C[i] = 0;
}
}
}
private static int getFactor(int cur) { if(count++ == n){
for(int i = 0;i<cur;i++){
System.out.print((char)(C[i]+'A'));
}
System.out.println(); return 0;
} for(int i=0;i<l;i++){
C[cur] = i;
int ok = 1;
for(int j = 1;j*2<=cur+1;j++){
int equal = 1;
for(int k = 0;k < j;k++){
if(C[cur - k] != C[cur-k-j] ){
equal = 0; //找到一个不相同的点本次的测试子段即为困难的串
break;
}
}
if(equal == 1){
ok = 0;
break; //存在了相同的连续子串,尝试下一个字母
}
}
if(ok==1){
if(getFactor(cur+1) == 0){
return 0;
}
} }
return 1; } }


UVA129 Krypton Factor 困难的串 dfs回溯【DFS】的更多相关文章

  1. Krypton Factor 困难的串-Uva 129(回溯)

    原题:https://uva.onlinejudge.org/external/1/129.pdf 按照字典顺序生成第n个“困难的串” “困难的串”指的是形如ABAB, ABCABC, CDFGZEF ...

  2. UVa 129 Krypton Factor困难的串 (dfs 递归搜索)

    回溯法,只需要判断当前串的后缀,而不是所有的子串 #include<iostream> #include<cstdio> using namespace std; ]; int ...

  3. uva129 - Krypton Factor 7.4.3 困难的串

      7.4.3困难的串 学习点:dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出 //7.4.3 困难的串 #include<cstdio> #include<cstrin ...

  4. UVA129 —— Krypton Factor (氪因素)

    Input and Output In order to provide the Quiz Master with a potentially unlimited source of question ...

  5. 129 - Krypton Factor

    /*UVa129 - Krypton Factor --回溯问题.看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯. -- */ #define _CRT_ ...

  6. UVA - 129 Krypton Factor (困难的串)(回溯法)

    题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检 ...

  7. UVa 129 Krypton Factor (DFS && 回溯)

    题意 : 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的 串”.例如,BB.ABCDACABCAB.ABCDABCD都是容易的串,而D.DC.ABDAB. CBABCB ...

  8. UVa 129 Krypton Factor【回溯】

    学习的紫书的回溯,理解起来还是好困难的说啊= = #include<iostream> #include<cstdio> #include<cstring> #in ...

  9. UVA-129 Krypton Factor(回溯)

    题目大意:由字母A到Z组成的字符串,其中有两个子串完全相同的叫做容易的串,反之叫困难的串.找出由前L个字母组成的第n个困难的串. 题目分析:简单回溯,不过要判断是否存在重复子串比较棘手.<入门经 ...

随机推荐

  1. Ubuntu 14.04 下NFS安装配置

    1.执行命令:sudo apt-get install nfs-kernel-server; 2.执行命令:mkdir /home/jack/nfs-share 建立一个nfs服务的专有的文件夹; 3 ...

  2. MIZ702N开发环境的准备1

    前言 最近由于工作需要开始接手基于MIZ702的硬件平台的Linux的开发,仔细想想,工作这么久,这好像还是我第一次接手嵌入式Liunx相关的工作.这几天拿到开发板,开始了阅读文档.安装Ubuntu虚 ...

  3. PS4游戏将登陆PC:一曲属于主机的悲歌

    ​​ ​ 曾经,红白机.PS游戏机等成为一代人难以磨灭的记忆.而随后的索尼PS3.微软Xbox 360.任天堂Wii U等,也称霸了次时代主机时代,成为家庭娱乐的中心.但面对着依托于PC和智能移动终端 ...

  4. maven笔记--持续更新

    笔记: 在创建maven项目的时候,如果用到servlet的时候,需要导入包,这时候,需要导入本地仓库的jar包,即依赖包.语法如下 <dependency> <groupId> ...

  5. 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZRjGGy 可交互视频 此视频是可 ...

  6. html+css+js+Hbuilder开发一款安卓APP,根本不用学Android开发!

    我们知道,要做一款安卓APP,咱们得先学安卓开发语言,例如java,前端后端.那么没有这些开发语言基础,咱们怎么做呢?其实现在有比较好的开发方案就是做webAPP,咱们可以用web前端知识构建安卓客户 ...

  7. Sketchup二次开发教程

    Sketchup提供了两套API: C API,主要用于读写SU文件.我们的SU文件导入功能就是用这套API做的 Ruby API,用于开发SU插件 这次我们主要关注Ruby API,因为它是实现更丰 ...

  8. 在shell脚本中调用sql语句

    查询员工信息 -S:静默登录 [oracle@localhost shells]$ cat shell1.sh #!/bin/bash #查询员工信息 sqlplus -S /nolog <&l ...

  9. 必备技能echarts

    echart 设置图例图标形状 https://blog.csdn.net/qq_15390381/article/details/81736796legend: { data: ["总数& ...

  10. plsql乱码问题

    1,问题:在plsql 中执行sql语句,查询结果带有中文,出现乱码,即" ??? ":如下: 2,解决: 1)输入sql语句 select * from V$NLS_PARAME ...