UVA 129困难的串【DFS】
题目大意:
给出n,l;要求按特定格式输出由前l个大写字母构成的按字母表排列的第n个没有连续重复子串的字符串以及该字符串长度。
此题是一道dfs递归回溯的基础题,难点在于对当前字符串是否有连续重复子串的判断,具体做法是这样的,以长度为对象枚举以新添进字符为尾巴的子串,看是否重复。
但是我还是有一点疑问,为什么我将这段代码做出下列改动,就会Runtime error!
#include <cstdio> int S[];
int n, L, cnt;//cnt记录已经生成的合法字符串的个数 int dfs(int cur)//cur记录S此时对应的字符串的长度 //改成void dfs(int cur)
{
if (cnt++ == n)//完成搜索,输出结果并逐级结束函数调用 (返回0)
{
for (int i = ; i < cur; ++i)
{
if (i % == && i) printf("\n"); //注意这里要将i%64放在i%4的前面,优先换行
else if (i % == && i) printf(" "); //这里要用else if,防止输出下一行的时候,同时第一个位置为空格
printf("%c", 'A' + S[i]);
}//特定格式输出
printf("\n%d\n", cur);
return ;//函数调用结束 //改成return;
}
for (int i = ; i < L; ++i)//i从0开始,'A'+s[cur]从A开始
{
S[cur] = i;
int ok = ;
for (int j = ; j * <= cur + ; ++j)//以长度为对象枚举以新添进字符为尾巴的子串,看是否重复。
{
int equal = ;
for (int k = ; k < j; ++k)
if (S[cur - k] != S[cur - k - j]) { equal = ; break; } //以j为长度枚举的相邻字串中,只要有任意一个字符与它对应位置的字符不相等,那么,以当前长度枚举的相邻子串就不相等
if (equal) { ok = ; break; }
}
if (ok) if (!dfs(cur + )) return ; //将这里改成if(ok)dfs(cur+1);
}
return ; //将这里删去
} int main()
{
while (scanf("%d%d", &n, &L) == , n || L)
{
cnt = ;//已找到合法字符串0个
dfs();//开始时S数组对应的字符串长度为0
}
return ;
}
2018-04-14
UVA 129困难的串【DFS】的更多相关文章
- UVa 129 困难的串
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA129 Krypton Factor 困难的串 dfs回溯【DFS】
Krypton Factor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- UVa 129 Krypton Factor困难的串 (dfs 递归搜索)
回溯法,只需要判断当前串的后缀,而不是所有的子串 #include<iostream> #include<cstdio> using namespace std; ]; int ...
- Krypton Factor 困难的串-Uva 129(回溯)
原题:https://uva.onlinejudge.org/external/1/129.pdf 按照字典顺序生成第n个“困难的串” “困难的串”指的是形如ABAB, ABCABC, CDFGZEF ...
- UVA - 129 Krypton Factor (困难的串)(回溯法)
题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检 ...
- 困难的串(dfs)
困难的串 题意: 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的串”.例如, BB.ABCDABCD都是容易的串,而D.DC.ABDAD ...
- 【DFS】困难的串
题目: 问题描述:如果一个字符串包含两个相邻的重复子串,则称它为容易的串,其他串称为困难的串.如:BB,ABCDACABCAB,ABCDABCD都是容易的,A,AB,ABA,D,DC,ABDAB,CB ...
- UVa 129 Krypton Factor (DFS && 回溯)
题意 : 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的 串”.例如,BB.ABCDACABCAB.ABCDABCD都是容易的串,而D.DC.ABDAB. CBABCB ...
- uva 129
暴力求解 大致题意 如果一个字符串含有相邻的重复字串称为容易的串,反之为非容易 求字典序第n困难的串…… 大致思路,暴力如果是容易的串停过,然后困难的串继续求解tot++ 总之先记着吧…… 最后输出格 ...
随机推荐
- [转]NOI_Linux Arbiter使用手册
讲述清楚,简单易懂的Arbiter使用手册 转载自 https://www.cnblogs.com/gengchen/p/7761565.html Arbiter 系统使用说明 Overview Ar ...
- 浏览器调用接口发现Provisional headers are shown
一次请求时候报错 无论如何也找不到错误,后台接口和前端请求都是正确的.后来发现是 自己浏览器上装了广告拦截的插件 把我这个请求给拦截 果断卸载插件立马就好了.
- rem,em
任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的body选择 ...
- JavaScript练习 - 正反选练习
正反选练习 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- OKVIS 代码框架
1. okvis_app_synchronous.cpp 在此文件中 okvis 对象为 okvis_estimator,是类 okvis::ThreadedKFVio 的实例化对象. 数据输入接口是 ...
- 2018-2019-2 网络对抗技术 20165230 Exp2 后门原理与实践
目录 1.实验内容 2.基础问题回答 3.常用后门工具实践 3.1netcat 3.2Meterpreter 3.3socat 4.实验过程 任务一:使用netcat获取主机操作Shell,cron启 ...
- Python3 configparse模块(配置)
ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 注意:在 ...
- 一个python脚本解决安装mq的依赖问题
import tarfile import sys,os from _utils.patrol2 import run_cmd import zipfile def get_version(filen ...
- SharePoint 2013 Workflow Manager 1.0 远程服务器返回错误: (400) 错误的请求。 不支持查询字符串中的 api-version
环境: Windows Server 2012 R2 Standard SharePoint Server 2013 with sp1 通过Web 平台安装程序 5.0,已安装 Workflow Ma ...
- win10 安装硕正
提示权限不够,解决方法:根据提示路径手动在路径下建立文件夹