【DFS】困难的串】的更多相关文章

困难的串 题意: 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的串”.例如,                 BB.ABCDABCD都是容易的串,而D.DC.ABDAD.CBABCBA都是困难的串. 输入正整数n和L,输出由前L个字符组成的.字典序第k个困难的串.例如,当L=3时,前7个困难的串          分别为A.AB.ABA.ABAC.ABACA.ABACAB.ABACABA.输入保证答案不超过80个字符. 样例输入: 7  3 30 3 样例输出:…
题目: 问题描述:如果一个字符串包含两个相邻的重复子串,则称它为容易的串,其他串称为困难的串.如:BB,ABCDACABCAB,ABCDABCD都是容易的,A,AB,ABA,D,DC,ABDAB,CBABCBA都是困难的. 输入正整数L,n,输出由前L个字符(大写英文字母)组成的,字典序第n小的困难的串. 例如,当L=3时,前7个困难的串分别为:A,AB,ABA,ABAC,ABACA,ABACAB,ABACABA. n 指定为4的话,输出ABAC. 代码: import java.util.Sc…
 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 Conte…
  7.4.3困难的串 学习点:dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出 //7.4.3 困难的串 #include<cstdio> #include<cstring> #include<iostream> #include<string> #include<algorithm> using namespace std; int n,L; int cnt; ]; bool judge(int cur) { ;i<=(cur…
题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检查枚举的当前串是否为困难串的方法:将最后一个字母(下标为cur)与第cur-j个字母不断依次向前比较j个字母. 采用此种方法的原因是,前面的串都已经是回文串. 例如:ABAC,不需检查每个长度为偶数的串是否符合要求,因为枚举的每一步都保证是困难串,所以长度为2的串只需检查AC,无需检查AB,BA. #prag…
题目描述 如果一个字符串包含两个相邻的重复子串,则称他是“容易的串”,其他串称为"困难的串".例如,BB,ABCDACABCAB,ABCDABCD都是容易的串,而D,DC,ABDAB,CBABCBAD都是困难的串. 输入 输入正整数n和L. 输出 输出由前L个字符串组成的,字典序第k小的困难的串.例如,当L=3时,前7个困难的串分别为A,AB,ABA,ABAC,ABACA,ABACAB,ABACABA.输入保证答案不超过80个字符. 样例输入 7 3 30 3 样例输出 ABACABA…
原题:https://uva.onlinejudge.org/external/1/129.pdf 按照字典顺序生成第n个“困难的串” “困难的串”指的是形如ABAB, ABCABC, CDFGZEFGZE的串,它们都有相邻的重复子字符串 字母的范围是L,既 'A'到'A' + L 分析: 大体上这是一道生成排列组合的题.难点在于我们如何判断当前生成的串是"困难的串" 我们首先采用递归按照字典顺序从小到大生成串, 那么每一次我们处理的都是前一个"困难的串", 既满足…
题目链接 题目大意: 给出n,l:要求按特定格式输出由前l个大写字母构成的按字母表排列的第n个没有连续重复子串的字符串以及该字符串长度. 此题是一道dfs递归回溯的基础题,难点在于对当前字符串是否有连续重复子串的判断,具体做法是这样的,以长度为对象枚举以新添进字符为尾巴的子串,看是否重复. 但是我还是有一点疑问,为什么我将这段代码做出下列改动,就会Runtime error! #include <cstdio> ]; int n, L, cnt;//cnt记录已经生成的合法字符串的个数 int…
回溯法,只需要判断当前串的后缀,而不是所有的子串 #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…
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=65 题意:输出不包含两个相邻的重复子串. 思路:这就跟八皇后问题是一样的,注意判断子串是否相同就可以了. #include<iostream> using namespace std; int n, l; ]; int flag; int cnt; void dfs(int cu…