HDU 1627 Krypton Factor
回溯法:避免无用判断,强化回溯代码的实现过程
题目的大意就是以字典序为准,排列字符串,但要保证一个字符串中不包含相邻的重复子串。
Problem Description
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
在判断当前字符串是否已经存在连续的重复子串,例如判断ABACABA是否包含连续重复子串,并不需要说检查该字符串所有长度为偶数的子串,仅需要做的是判断当前串的后缀。
另外对回溯法来说,一旦本次所要赋值的字符不满足,并且在循环了所有可以在这一次赋值的字符后,仍未满足,就要回溯到上一层,这种情况首先要保证成功次数不要增加(可以将次数设置为全局变量,当然进行完这一组数据后,要记得重新赋值,避免后面的测试数据出现问题,通常全局变量都要在完成一组数据测试后,重新赋初始值)
代码如下
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 200
using namespace std;
char alp[MAXN]="AABCDEFGHIJKLMNOPQRSTUVWXYZ";//首先打表方便后面的操作
char ch[MAXN]="#";//处理一个小的细节,当第一个字符时,其实不需要判断前面的字符,为了统一操作,在ch[0]处赋一个与第一个字符一定不同的量
int c=;
bool tag=false;//全局变量,完成字符串的标志
void dfs(int n,int t,int cur)
{
int i,j,k=,m,s;
bool flag=true;
if(n==c)//以次数作为完成的标志
{
while(k<=cur-)
{
if(k==)
cout<<endl;
if(k%==&&k!=&&k!=cur-)//处理格式要求
cout<<ch[k]<<' ';
else
cout<<ch[k];
k++;
}
cout<<endl;
cout<<cur-<<endl;
tag=true;//以标示符作为字符串完成的标志
}
else
{
for(i=;i<=t;i++)//循环此次可以赋值的字符
{
flag=true;
ch[cur]=alp[i];
for(j=cur/;j<=cur-;j++)//字符串判重
{
s=;
m=cur-j-;
for(k=;k<=m;k++)
{
if(ch[cur-k]==ch[j-k])
s++;
}
if(s==m+)
{
flag=false;
break;
}
}
if(flag==false)
continue;
if(!tag)
{
c++;
dfs(n,t,cur+);//满足,则字符的长度加一,这也满足字典序的要求,若回溯到这里,那么即回头继续循环可以满足的字符,相当于说字符长度加一个不满足,那么前一个字符往后改,就如同从ABC->ABD(原本要走ABCD的)
}
if(tag)
{
// cout<<"return ";
return ;//若已完成则一步步回头
}
}
}
}
int main()
{
int n,l;
while(cin>>n>>l)
{
if(n==&&l==)
break;
else
dfs(n,l,);
tag=false;//全局变量重新赋初始值
c=;// 全局变量重新赋初始值
}
return ;
}
HDU 1627 Krypton Factor的更多相关文章
- hdu - 1627 Krypton Factor (dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1627 给定 n 和 L 找出第n个范围在0-L之内的字符串,字符串要求没有相邻的子串是相同的. 按照格式输出. ...
- Krypton Factor
Krypton Factor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- UVA.129 Krypton Factor (搜索+暴力)
UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...
- 129 - Krypton Factor
/*UVa129 - Krypton Factor --回溯问题.看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯. -- */ #define _CRT_ ...
- UVA129 Krypton Factor 困难的串 dfs回溯【DFS】
Krypton Factor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 5428 The Factor 分解质因数
The Factor Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest ...
- HDU 5428 The Factor 分解因式
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5428 The Factor Accepts: 101 Submissions: 811 Tim ...
- HDOJ/HDU 2710 Max Factor(素数快速筛选~)
Problem Description To improve the organization of his farm, Farmer John labels each of his N (1 < ...
- hdu 5428 The Factor(数学)
Problem Description There is a sequence of n positive integers. Fancycoder is addicted to learn thei ...
随机推荐
- chardet的使用
http://blog.csdn.net/jy692405180/article/details/52496599
- PS 如何制作WIN7的玻璃化透明窗口效果
1 绘制一个圆角矩形,并将不透明度设为16%以及添加投影效果 2 再次添加外发光效果 3 新建一个图层,再填充一下这个圆角矩形(可以填充为任意颜色,只要和别的颜色区分开来) 4 选中这个区 ...
- Toolbar的使用.md
1.什么是Toolbar Toolbar是在Android5.0时出现的一个新控件,其目的用于取代Actionbar,它与Actionbar最大的差别就是Toolbar使用更加灵活.自由,而且Tool ...
- NATSserver配置具体解释
NATSserver配置具体解释 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 虽然NATS能够无配置的执行,但也能 ...
- Django小项目练习
Django学生管理系统 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^class_list/', views.class_list ...
- Java反射及其在Android中的应用学习总结
一. Java反射机制 Reflection 是Java被视为动态(或准动态)语言的一个关键性质.这个机制同意程序在执行时透过Reflection APIs取得不论什么一个已知名称的class的内部信 ...
- IDEA 适用技巧
快速打印 sout - System.out.println(); serr - System.err.println(); //在控制台中是红色的 输入sout,按下enter键,生成System. ...
- 02 svn 文件提交与目录结构
一:文件操作给svn服务器提交程序文件: ① 在被提交文件的身上点击右键------> tortoiseSVN----->add ② 在被提交文件身上点击右键------> comm ...
- JQGrid总记录数和查询消耗时间不显示
其他做的几个页面都显示,只有一个不显示....百度发现, viewrecords选项未配置,应该设置为ture才可以.
- 【BZOJ3193】[JLOI2013]地形生成 DP
[BZOJ3193][JLOI2013]地形生成 Description 最近IK正在做关于地形建模的工作.其中一个工作阶段就是把一些山排列成一行.每座山都有各不相同的标号和高度.为了遵从一些设计上的 ...