博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[搜索]UVa 129 困难的串
阅读量:4639 次
发布时间:2019-06-09

本文共 1451 字,大约阅读时间需要 4 分钟。

 

题意:将一个包含两个相邻的重复子串的子串,称为“容易的串”,其他为“困难的串”。 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串。

输入样例:

7 330 30 0

 

输出样例

ABAC ABA7ABAC ABCA CBAB CABA CABC ACBA CABA28

 

UVa的输入输出很烦。

1、每行最后无空格

2、每四个字母为一组,每组中间有一个空格,每十六组一行,第十七组在第二行输出(注意第一行最后不能有空格)

 

思路:搜索,判断后缀(因为前面的部分已经判断过)。

直接看代码:

#include
#include
#include
#include
#include
using namespace std;int cnt,n,l;char a[1000];int dfs(int cur){ if(cnt++ == n){ for(int i = 0; i < cur; i++){ printf("%c",a[i]); if(i + 1 == 64&&i + 1!= cur) printf("\n"); else if((i + 1)%4 == 0&&i + 1!= cur)printf(" "); } printf("\n%d\n",cur ); return 0;//返回0代表已经找到第n大的困难的串 } for(int i = 0; i < l; i++){// a[cur] = i + 'A'; int ok = 1; for(int j = 1; j*2 <= cur + 1; j++){//j是后缀长度 int is_same = 1; for(int k = 0; k < j; k++){ if(a[cur - k] != a[cur - j - k]){//依次比较各个字母 is_same = 0; break; } } if(is_same){ ok = 0; break; } } if(ok)if(!dfs(cur + 1))return 0; } return 1;}int main(){ while((cin >> n >> l)&&(n|l)){//特判n==0的情况 cnt = 0; dfs(0); } return 0;}

 

转载于:https://www.cnblogs.com/FoxC/p/10629851.html

你可能感兴趣的文章
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>
jquery控制css的display(控制元素的显示与隐藏)
查看>>
关于python做人工智能的一个网页(很牛逼)
查看>>
判断控件的CGRect是否重合,获取控件的最大XY值
查看>>
POJ-1128 Frame Stacking
查看>>
异常体系
查看>>
String.format(转)
查看>>
解决 CS0006 未能找到元数据文件
查看>>
HDU 5131.Song Jiang's rank list (2014ACM/ICPC亚洲区广州站-重现赛)
查看>>
mysql搭建主从数据库
查看>>
新的一年,新的开始
查看>>
python模块struct
查看>>
图像的灰度级和动态范围(转)
查看>>
C# MODBUS协议 上位机(转)
查看>>
CSS box-shadow 属性
查看>>