UVA129 —— Krypton Factor (氪因素)
2015-08-02 21:23
281 查看
Input and Output
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
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 <vector> #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; int cnt ; char ma[1100][1100]; int n, len; int p[100]; int dfs(int cur) { if(cnt == n) { for(int i = 1; i < cur; i++) { printf("%c",p[i] + 'A' -1); if(i == cur - 1) break; if(i%4==0) { if(i%64==0) putchar('\n'); else putchar(' '); } } printf("\n%d\n", cur-1); return 0; } for(int i = 1; i <= len; i++) { p[cur] = i; int ok = 1; for(int j = 1; j * 2 <= cur+1; j++) //枚举进行比较 { int flag =1; for(int k = 0; k < j; k++) { if(p[cur- k] != p[cur-j-k]) { flag = 0; break; } } if(flag ) { ok =0; break; } } if(ok) { cnt ++; if(!dfs(cur + 1)) return 0; } } return 1; } int main() { while(scanf("%d%d",&n,&len) != EOF) { cnt = 0; if(!n && !len) break; dfs(1); } return 0; }
相关文章推荐
- uva10828(高斯消元)
- UVA129 —— Krypton Factor (氪因素)
- myeclipse中Servlet出错
- Python学习之生成器
- 移植u-boot-2015.07-rc3之增加smdk2440开发板框架支持(一)
- JAVA多线程实例详解
- 掌纹数据集
- Python IDE:PyCharm中的那些实用功能
- UnrealEngine3-渲染构架
- Java的8中封装类(未完待续)
- hdu5135 Little Zu Chongzhi's Triangles(DP)
- Android Funcitons Collection
- hive学习笔记——Hive表的创建
- 搭建iSCSI文件服务器故障转移群集
- Learn OpenGLES: 正交变换
- innobackupex备份恢复详解
- jQuery 的选择器
- 第二道水题
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
- 关于jpeg文件部分解码获取其dct系数遇到的一些问题