题目链接

题目大意:

给出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】的更多相关文章

  1. UVa 129 困难的串

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. UVA129 Krypton Factor 困难的串 dfs回溯【DFS】

     Krypton Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. UVa 129 Krypton Factor困难的串 (dfs 递归搜索)

    回溯法,只需要判断当前串的后缀,而不是所有的子串 #include<iostream> #include<cstdio> using namespace std; ]; int ...

  4. Krypton Factor 困难的串-Uva 129(回溯)

    原题:https://uva.onlinejudge.org/external/1/129.pdf 按照字典顺序生成第n个“困难的串” “困难的串”指的是形如ABAB, ABCABC, CDFGZEF ...

  5. UVA - 129 Krypton Factor (困难的串)(回溯法)

    题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检 ...

  6. 困难的串(dfs)

    困难的串 题意: 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的串”.例如,                 BB.ABCDABCD都是容易的串,而D.DC.ABDAD ...

  7. 【DFS】困难的串

    题目: 问题描述:如果一个字符串包含两个相邻的重复子串,则称它为容易的串,其他串称为困难的串.如:BB,ABCDACABCAB,ABCDABCD都是容易的,A,AB,ABA,D,DC,ABDAB,CB ...

  8. UVa 129 Krypton Factor (DFS && 回溯)

    题意 : 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的 串”.例如,BB.ABCDACABCAB.ABCDABCD都是容易的串,而D.DC.ABDAB. CBABCB ...

  9. uva 129

    暴力求解 大致题意 如果一个字符串含有相邻的重复字串称为容易的串,反之为非容易 求字典序第n困难的串…… 大致思路,暴力如果是容易的串停过,然后困难的串继续求解tot++ 总之先记着吧…… 最后输出格 ...

随机推荐

  1. Oracle设置某张表为只读

    Oracle 11g开始支持设置某张表为只读,这样可以防范对某些表的修改,起到一定的安全性. 设置如下: --设置表为只读权限(加锁) ALTER TABLE tab_name READ ONLY ; ...

  2. http://blog.csdn.net/w_e_i_/article/details/70766035

    http://blog.csdn.net/w_e_i_/article/details/70766035

  3. python学习:绝对路径和相对路径

    python学习:绝对路径和相对路径 大牛们应该对路径都很了解了,这篇文章主要给像我这样的入门小白普及常识用的,啊哈 下面的路径介绍针对windows,其他平台的暂时不是很了解. 在编写的py文件中打 ...

  4. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  5. find结合rm删除或mv移动文件的方法

    删除过期的备份文件,多用find结合rm方法,可以使用-exec或xargs -exec rm -rf {} \; 或 find /home/mysqlbackup -name "*$thi ...

  6. Bootstrap3.0学习第一轮(入门)

    详情请查看 http://aehyok.com/Blog/Detail/7.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  7. Sql 插入自定义主键

    在遇到数据库设计是自增的主键,且需要插入自定义的主键Id时,这个时候如果直接Insert的话,将会发生错误,错误提示信息: 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'XXX' ...

  8. 为你的VPS进行一些安全设置吧

    安全是一个VPS最基本的必备条件,若您的VPS三天两头被人攻破,那么对于网站来说也没什么意义了,所以,在创建了Web服务器之后,您首先要做的事情就是将您的VPS加固,至少让普通黑客没有办法能够攻破您的 ...

  9. centos 报错 “Job for iptables.service failed because the control process exited with error code.”的解决办法

    原因:因为centos7默认的防火墙是firewalld防火墙,不是使用iptables,因此需要先关闭firewalld服务,或者干脆使用默认的firewalld防火墙. 操作步骤: 关闭防火墙 1 ...

  10. oracle 进阶之model子句

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6692841.html 一,  mode ...