Uva 129 Krypton Factor
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 然后cnt++
初始化为0的原因是 第一次在主函数中调用的时候 执行判断语句 cnt++ == n的时候 cnt就更新为1了,所以是初始化为0而不是1.
2.是判断是否是简单的串的方法
这是一个由前L个字符组成的字符串,所以有一个i<l的for循环和 a[cur]='A'+i;的语句
int ok为1 表示困难串,因为 判断完之后是困难串,才进入递归dfs
之后,我们是判断后缀是否相同,而不是整个字符串拿来判断,那样会做很多重复的工作导致效率下降。
初始化isequal=1,然后开始判断,一旦发现不等的,就isequal=0然后break
在循环外面 判断 if(isequanl==1) 如果是1 则是简单串 则ok=0;
如果ok==1 则进入递归 就是这样一个逻辑
;i<l;i++)
{
a[cur]='A'+i;
;
;j*<=cur+;j++)
{
;
;k<j;k++)
if(a[cur-k]!=a[cur-j-k])
{isequal=;break;}
)
{
//如果是简单串 则ok=0;
ok=;break;
}
}
&& getans==);
}
3. 得到答案之后记得更新getans 为true 终止剩下的dfs 不然会一直输出
或者 dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出!!! 使用int型的dfs 找到答案后return 0 其余dfs均return 1
)) ;
#include <cstdio>
int n,l,cnt;
];
bool getans;
void dfs(int cur)
{
if(cnt++ == n)
{
getans=true;
;i<cur;i++)
{
&& i%==)
printf("\n%c",a[i]);
&& i%==)
printf(" %c",a[i]);
else
printf("%c",a[i]);
}
printf("\n");
printf("%d\n",cur);
}
;i<l;i++)
{
a[cur]='A'+i;
;//ok=1表示困难的串
;j*<=cur+;j++)
{
;
;k<j;k++)
if(a[cur-k]!=a[cur-j-k])
{isequal=;break;}
)
{
//如果是简单串 则ok=0;
ok=;break;
}
}
&& getans==);
}
}
int main()
{
while(scanf("%d%d",&n,&l)!=EOF)
{
&& l==) break;
getans=false;
cnt=;
dfs();
}
;
}
Uva 129 Krypton Factor的更多相关文章
- UVA.129 Krypton Factor (搜索+暴力)
UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...
- UVa 129 Krypton Factor【回溯】
学习的紫书的回溯,理解起来还是好困难的说啊= = #include<iostream> #include<cstdio> #include<cstring> #in ...
- UVa 129 Krypton Factor困难的串 (dfs 递归搜索)
回溯法,只需要判断当前串的后缀,而不是所有的子串 #include<iostream> #include<cstdio> using namespace std; ]; int ...
- UVA - 129 Krypton Factor (困难的串)(回溯法)
题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检 ...
- UVa 129 Krypton Factor (DFS && 回溯)
题意 : 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的 串”.例如,BB.ABCDACABCAB.ABCDABCD都是容易的串,而D.DC.ABDAB. CBABCB ...
- uva 129 krypton factors ——yhx
Krypton Factor You have been employed by the organisers of a Super Krypton Factor Contest in which ...
- 129 - Krypton Factor
/*UVa129 - Krypton Factor --回溯问题.看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯. -- */ #define _CRT_ ...
- UVA 129_ Krypton Factor
题意: 一个字符串含有两个相邻的重复的子串,则称这个串为容易的串,其他为困难的串,对于给定n,l,求出由前l个字符组成的字典序第n小的困难的串. 分析: 按字典序在字符串末尾增加新的字符,并从当前字符 ...
- UVA129 Krypton Factor 困难的串 dfs回溯【DFS】
Krypton Factor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- Common Knowledge_快速幂
问题 I: Common Knowledge 时间限制: 1 Sec 内存限制: 64 MB提交: 9 解决: 8[提交][状态][讨论版] 题目描述 Alice and Bob play som ...
- windows编程中c语言知识回顾
1.include: #include表示只在系统提供的头文件中查找: #include "Head File"表示先在当前目录中搜索,若不存在,再到系统目录中查找: vs环境中, ...
- oracle简历自增序列(转)
步骤:1.创建序列 2.创建触发器. 语法解析:create sequence TB_CODE_SEQUENCEminvalue 1maxvalue 99999999999999999999999 ...
- 对map创建出来的值顺序排序问题
TreeMap 在用Ajax动态创建checkBox时,而把值放在了HashMap中,hashMap是无序的,因此你动态创建出来的顺序是乱的,比如你想要的顺序是1.2.3.4但出来的结果可能是 3.2 ...
- android入门到熟练(五)---广播
1.广播类型:标准广播和有序广播.标准广播是异步广播在广播发出之后所有接收器几乎会同一时刻接收到,没有先后顺序,效率高,但无法被截断.有序广播则是同步广播,同一时刻只能一个接收器接收这条消息,等执行完 ...
- 加载ComboBox控件
/// <summary> /// 加载公司 /// </summary> /// <param name="cbbCompany">Combo ...
- php继承、多态
继承: 概念:子类可以继承父类的一切 特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类 方法重写:在子类里面对父类的方法进行重写. 重写:override 重载,编译多态:overlo ...
- 编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值
编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值 1 #import <Foundation/Foundation.h> 2 3 int main( ...
- W3C对DOM2.0定义的标准事件
DOM2.0模型将事件处理流程分为三个阶段: 一.事件捕获阶段, 二.事件目标阶段, 三.事件起泡阶段. 具体如图(图片来源于网络,侵删) 事件捕获:当某个元素触发某个事件(如onclick),顶层对 ...
- Eclipse主题更改
1. 直接安装color theme eclipse:Help->Install New Software->Work with:Update Site -http://eclipse-c ...