题目大意:由字母A到Z组成的字符串,其中有两个子串完全相同的叫做容易的串,反之叫困难的串。找出由前L个字母组成的第n个困难的串。

题目分析:简单回溯,不过要判断是否存在重复子串比较棘手。《入门经典》上借鉴八皇后问题,只判断添进字符后是否存在连续子串。具体做法是这样的,以长度为对象枚举以新添进字符为尾巴的子串,看是否重复。

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std; int n,k,cnt,path[1000]; void dfs(int cur)
{
if(cur>81)
return ;
if(cnt++==n){
for(int i=0;i<cur;++i){
printf("%c",char(path[i]+'A'));
if(i%4==3&&i!=cur-1){
if(i%64==63)
printf("\n");
else
printf(" ");
}
}
printf("\n%d\n",cur);
return ;
}
for(int i=0;i<k;++i){
path[cur]=i;
int flag=1;
for(int j=1;j*2<=cur+1;++j){
int ok=1;
for(int l=0;l<j;++l)
if(path[cur-l]!=path[cur-l-j]){
ok=0;
break;
}
if(ok){
flag=0;
break;
}
}
if(flag)
dfs(cur+1);
if(cnt>n)
return ;
}
} int main()
{
while(scanf("%d%d",&n,&k)&&(n+k))
{
cnt=0;
dfs(0);
}
return 0;
}

  

最新文章

  1. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
  2. 网络--&gt;监控--&gt;单位换算
  3. JS图片懒加载
  4. Java核心技术II读书笔记(三)
  5. Linux服务器的常用备份方法
  6. 禁用ios7 手势滑动返回功能
  7. RSS新闻阅读器
  8. linux下串口的阻塞和非阻塞操作
  9. python初探-数据类型
  10. 一、SOAP简单对象访问协议讲解
  11. android里uri和url的区别
  12. (贪心 字符串 打好基础)51nod 1182完美字符串
  13. toFixed()精度丢失;复选框全选、取消
  14. [原][译]JSBSim官方源码文档翻译(google翻译)
  15. UI 设计的整个工作流程是怎样的?
  16. vue 父子组件之间传参
  17. HTML5仿微信公众号界面
  18. Python处理Excel和PDF文档
  19. redis概览
  20. Codeforces735B Urbanization 2016-12-13 11:58 114人阅读 评论(0) 收藏

热门文章

  1. 去掉chrome、safari input或textarea在得到焦点时出现黄色边框的方法
  2. HTTP返回码中301与302的区别(转)
  3. Python的Tornado框架的异步任务与AsyncHTTPClient 
  4. PAT 1135 Is It A Red-Black Tree[难]
  5. python16_day36【爬虫1】
  6. js判断display隐藏显示
  7. C++中定义NULL的头文件
  8. 028-B+树(一)
  9. poj1329 Circle Through Three Points
  10. c# ArrayList 的排序问题!