Krypton Factor

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 181    Accepted Submission(s): 60

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:

A
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 3
0 0
 
Sample Output
ABAC ABCA CBAB CABA CABC ACBA CABA
28
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;
const int INF=0x7fffffff;
const double EXP=1E-;
const int MS=;
int a[MS];
int cnt,l,n; int dfs(int cur)
{
if(cnt++==n)
{
for(int i=;i<cur;i++)
{
if(i&&(i%)==) //第k*64+1个的话,需要换行
printf("\n");
else if(i&&i%==) //第k*4+1个的话,需要空格
printf(" ");
printf("%c",a[i]+'A');
}
printf("\n%d\n",cur);
return ; //为了得到了答案立即退出方便
}
else
{
for(int i=;i<l;i++)
{
a[cur]=i;
int ok=;
for(int j=;j*<=cur+;j++)
{
int is=;
for(int k=;k<j;k++)
if(a[cur-k]!=a[cur-j-k])
{
is=;
break;
}
if(is)
{
ok=;
break;
}
}
if(ok)
{
if(!dfs(cur+))
return ;
}
}
}
return ;
} int main()
{
while(cin>>n>>l&&(n+l))
{
cnt=;
dfs();
}
}

Krypton Factor的更多相关文章

  1. UVA.129 Krypton Factor (搜索+暴力)

    UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...

  2. 129 - Krypton Factor

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

  3. UVA129 Krypton Factor 困难的串 dfs回溯【DFS】

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

  4. Uva 129 Krypton Factor

    0.这道题的输出 处理起来挺麻烦的 以后类似的可以借鉴一下 ;i<cur;i++) { && i%==) printf("\n%c",a[i]); & ...

  5. UVa 129 Krypton Factor【回溯】

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

  6. uva129 - Krypton Factor 7.4.3 困难的串

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

  7. UVa 129 (回溯法) Krypton Factor

    回溯法确实不是很好理解掌握的,学习紫书的代码细细体会. #include <cstdio> ]; int n, L, cnt; int dfs(int cur) { if(cnt++ == ...

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

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

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

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

随机推荐

  1. JavaScript数值转换总结

    在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1  param是Boolean值,true和false分别转换为1和0: ...

  2. Matlab文件操作

    1.  Matlab文件操作主要有三个步骤:首先打开文件,然后对文件进行读写操作,最后要关闭文件. 2.  fid=fopen(文件名,打开方式) 'r' 只读,文件必须存在(缺省的打开方式) 'w' ...

  3. mysql repair data 语句

    1. 这条语句主要是用来修复一个表中的数据 , 在另一个统计表中没有统计时,进行修改统计表的操作 update expert_count ec inner join ( select sum(e.EF ...

  4. homework-09

    这次作业主要考察C++11的简单用法,个人感觉这样的练习对我这种编程能力比较差的非常有用,加深了对C++11的理解. Lambda的用法 计算“Hello World!”中 a.字母‘e’的个数 b. ...

  5. 采用现代Objective-C

    多年来,Objective-C语言已经有了革命性的发展.虽然核心理念和实践保持不变,但语言中的部分内容经历了重大的变化和改进.现代化的Objective-C在类型安全.内存管理.性能.和其他方面都得到 ...

  6. jps用法

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...

  7. BestCoder Round #66 (div.2) hdu5592

    GTW likes math Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  8. 精通Linux的“kill”命令

    无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭.在Linux(还有Mac),你可以用一个"kill"命令强制终结它.在这个教程中,我们将展示给你多种 ...

  9. Codeforces Round #245 (Div. 1) B. Working out (简单DP)

    题目链接:http://codeforces.com/problemset/problem/429/B 给你一个矩阵,一个人从(1, 1) ->(n, m),只能向下或者向右: 一个人从(n, ...

  10. Mysql知识要点总结

    1.安装 要点:记得更改字符集 2.数据类型 常用数据类型:INT VARCHAR BLOG 3.操作数据库 SHOW DATABASES; CREATE DATABASE 名称; DROP DATA ...