题目:Krypton Factor

题意:如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的串”。输入n,L,输出由前L个字符组成的、 字典序第n小的困难的串。

思路:

(1)dfs递归枚举前l个字符;

(2)判断相邻的重复子串:无需判断整个串的重复,只需判断当前串的后缀,枚举串的长度(只需枚举到串长的一半),按串长度平分串,然后比较俩串的后缀是否相等。

(3)递归时,找到结果后需要返回值,用于dfs的return结束。

参考:入门经典-例题7-5-P195

代码:

#include <iostream>
#include <stdio.h>
using namespace std;
int n,l,cot,prt[100];
int dfs(int len){if(cot++ == n){//达到个数int temp = 0;for(int i=0;i<len;i++){printf("%c",prt[i]+'A');if((i+1)%4 == 0){//4个为一组if(i+1 >= len) continue;//最后一组不做处理if((temp+1)%16) printf(" ");else printf("\n");temp++;}}if((temp+1)%16 || len%4) printf("\n");//处理最后一个换行printf("%d\n",len);return 0;}for(int i=0;i<l;i++){//枚举l个字符prt[len] = i;int ok = 1;for(int j=1;j*2<=len+1;j++){//j*2的后缀int equ = 1;for(int k=0;k<j;k++){if(prt[len-k] != prt[len-k-j]){//检查后一半是否等于前一半equ = 0;break;}}if(equ){ok = 0;break;}//不相等标记}if(ok) if(!dfs(len+1)) return 0;//找到解,返回0,if成立,return结束(如果不加这步的话无法退出递归了)}
return 1;}
int main()
{while(scanf("%d%d",&n,&l)!=EOF && (n || l)){cot = 0;dfs(0);}return 0;
}

Uva129 Krypton Factor【dfs回溯】【例题7-5】相关推荐

  1. 回溯法之避免无用判断 UVA129 Krypton Factor困难的串

    题意:如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串" 输入正整数n和L,输出由前L个字符组成的并且它的字典序是第n小的串,和 ...

  2. UVa129 Krypton Factor

    回溯法. 使用26个字母中前L个字母,要求输出一个不存在相同的相邻子串的序列,该序列应是所有合法序列中字典序第N小的. DFS枚举所有可行序列,因为序列长度不定所以解答树中除根节点之外的每个结点都算合 ...

  3. UVa 129 - Krypton Factor(回溯法)

    2018-5-12 如何判断一个字符串是否包含连续重复子串呢? 我们可以检查所有长度为偶数的子串,判断每一个子串的前半部分是否与后半部分相同,但是实际上我们只需每一次判断当前串的后缀即可,因为前面的我 ...

  4. [DFS|回溯法] leetcode 17 电话号码的字母组合

    [DFS|回溯法] leetcode 17 电话号码的字母组合 1.题目 题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 ...

  5. Krypton Factor UVA - 129

    题目链接:Krypton Factor UVA - 129 #include<iostream> #include<string> #include<cstdio> ...

  6. 129:Krypton Factor

    Krypton Factor 注意 && 别写成 & 了... #include<bits/stdc++.h> using namespace std; const ...

  7. HDU1016 Prime Ring Problem dfs+回溯

    点击打开链接 Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  8. LeetCode 980. 不同路径 III(DFS+回溯)

    1. 题目 在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格. 2 表示结束方格,且只有一个结束方格. 0 表示我们可以走过的空方格. -1 表示我们无法跨越的障 ...

  9. PAT1087 All Roads Lead to Rome (30)(最短路径+dfs+回溯)

    题意: 有N个城市,M条无向边,从某个给定的起始城市出发,前往名为ROM的城市.每个城市(除了起始城市)都有一个点权(称为幸福值),和边权(每条边所需的花费).求从起点到ROM所需要的最少花费,并输出 ...

最新文章

  1. react-native安装Ant Design
  2. @property、@sythesize以及Ivar和@dynamic讲解(下)
  3. 记住这9点,SCI论文结果轻松写
  4. 写作工具_4种加快数据科学写作速度的工具
  5. gravity 时序图绘制,改
  6. 华三模拟器hcl实验手册_实验室 | # 实验室废气处理系统的设计#
  7. Oracle/PLSQL Repeat Until Loop
  8. Adaptive Execution 让 Spark SQL 更高效更智能
  9. python电脑下载什么软件-python官网有几个下载文件?有什么不同?
  10. 区块链 PBFT最多多少个节点
  11. Laravel 项目使用 Carbon 人性化显示文章发表时间
  12. Calendar类、自定义实现日历控件
  13. CDD分析(rpsblast分析)研究
  14. 拼多多推广中出价是越高效果越好吗?
  15. 数据库理论 05 关系数据库设计——基于《数据库系统概念》第七版
  16. css深入剖析transform的skew
  17. cpu字长、操作系统字长和jvm中各数据类型占用的字节数关系
  18. Windows 10文件夹中的一些高级搜索技巧
  19. 学习心得:HSV颜色空间
  20. 这些SEO搜索技巧你会不会用?

热门文章

  1. DBeaver 操作数据库
  2. ssh / sftp 远程登录出现:RSA host key for *.*.*.* has changed...的解决办法
  3. @Transactional注解和Mybatis缓存问题(Mybatis 查询结果 List 对List修改后再次查询,结果与数据库不一致)
  4. [530]Win10怎么打开注册表编辑器
  5. android ota机制,Android OTA简介
  6. js适配IOS代T时间戳转日期
  7. 计算机网络笔记及思维导图(1)——概述
  8. 陕西延安一男子看钓鱼忘拉手刹,爱车溜进鱼塘:自己都惊呆了
  9. 过敏性鼻炎的治疗方法
  10. c语言中1代表true嘛,c++中-1是true呢还是false呢