UVA.129 Krypton Factor (搜索+暴力)】的更多相关文章

UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断,根据后缀的规则来判断,枚举后缀长度[1,len/2],后缀中是否有重复子串,若是的话表明不是合法串. 还有一个注意的地方,每次递归调用时,序号就要+1,无论是回溯回来的递归,还是深度搜索的递归,因为没找到一组可行解,编号就要加一.原因是此题不是用递归深度来判断输出的. 代码总览 #include…
回溯法,只需要判断当前串的后缀,而不是所有的子串 #include<iostream> #include<cstdio> using namespace std; ]; int n,l,cnt; int bfs(int cur) { if(cnt++==n) { ; i<cur; i++) printf("%c",'A'+s[i]); cout<<endl; ; } ; i<l; i++) { s[cur]=i; ; ; j*<=c…
0.这道题的输出 处理起来挺麻烦的 以后类似的可以借鉴一下 ;i<cur;i++) { && i%==) printf("\n%c",a[i]); && i%==) printf(" %c",a[i]); else printf("%c",a[i]); } 1.还有一个是输出 第n小  怎么来控制第n小   利用的是一个初始化为0的cnt  每当满足所有条件 进入递归边界的时候 判断一下cnt是否等于n 然后…
题意 : 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的 串”.例如,BB.ABCDACABCAB.ABCDABCD都是容易的串,而D.DC.ABDAB. CBABCBA都是困难的串.程序从输入中读取多行数据,每行包括两个整数n和L(即按此顺序给出),其中n > 0,L的范围是1 ≤ L ≤ 26.根据这些输入,程序要按照字母表升序打印出第n个“hard”字串(由字母表中的前L个字母构成),并在接下来的一行打印这个串的长度.按照上述规则,第一个串应该是“A”.对于…
学习的紫书的回溯,理解起来还是好困难的说啊= = #include<iostream> #include<cstdio> #include<cstring> #include <cmath> #include<stack> #include<vector> #include<map> #include<set> #include<queue> #include<algorithm> us…
题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检查枚举的当前串是否为困难串的方法:将最后一个字母(下标为cur)与第cur-j个字母不断依次向前比较j个字母. 采用此种方法的原因是,前面的串都已经是回文串. 例如:ABAC,不需检查每个长度为偶数的串是否符合要求,因为枚举的每一步都保证是困难串,所以长度为2的串只需检查AC,无需检查AB,BA. #prag…
/*UVa129 - Krypton Factor --回溯问题.看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯. -- */ #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<fstream> #include<time.h> #include<vector> using namespace std; const int maxn = 10…
 Krypton Factor  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 seque…
题意: 一个字符串含有两个相邻的重复的子串,则称这个串为容易的串,其他为困难的串,对于给定n,l,求出由前l个字符组成的字典序第n小的困难的串. 分析: 按字典序在字符串末尾增加新的字符,并从当前字符串后缀入手,判断长度为偶数的子串中,是否含有重复的相邻子串. 代码: #include<cstdio> #include<iostream> using namespace std; int n, l, cnt; int s[85]; int dfs(int cur) { if(cnt…
暴力求解 大致题意 如果一个字符串含有相邻的重复字串称为容易的串,反之为非容易 求字典序第n困难的串…… 大致思路,暴力如果是容易的串停过,然后困难的串继续求解tot++ 总之先记着吧…… 最后输出格式…… uva 129 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <cstdl…