UVA129 困难的串 Krypton Factor

简介: UVA129 困难的串 Krypton Factor

题目描述

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


输入样例

7 3
30 3
0 0

输出样例

7 3
ABAC ABA
7
30 3
ABAC ABCA CBAB CABA CABC ACBA CABA
28
0 0


思路解析: 这个题是求字符串的困难串,在进行判断时,由于困难串比较难判断,我们来判断简单串,如果判断简单串呢?我们只需要判断字符串的后缀子串即可.因为一个困难串+一个字符,相邻子串只可能出现在后面.所以我们只需要判断后缀即可.

之后采用DFS解决即可.

参考代码

#include<iostream>
using namespace std;
int n,cnt,L,S[100];
int dfs(int cur){
  //判断困难串是否达到了n
  if(cnt++==n){
    for(int i = 0; i < cur; i++){
      if(i&&i%4==0&&i!=64){
        cout<<" ";
      }else if(i==64){
        cout<<endl; 
      }
      cout<<char('A'+S[i]); 
    }
    cout<<endl;
    cout<<cur<<endl;
    return 0;//结束
  }
  for(int i = 0;i < L;i++)//依次判断cur位置可能出现的字符. 
  {
    S[cur] = i;
    int ok = 1;//困难串的标记
    for(int j = 1; j*2 <= cur+1; j++) {//判断所有的后缀 
      int equal = 1;
      for(int k = 0; k < j;k++){
        if(S[cur-k]!=S[cur-k-j]){//不相等,说明以J*2为后缀不是简单串 (但该字符串未必就是困难串,因为还有其他后缀,只有所有后缀都遍历过且都不是简单串 才成立. ) 
          equal = 0;
          break; 
        }
      } 
      if(equal){//equal:0 困难串 equal:1简单串  如果是简单串则结束该字符串,进行开始尝试下一个字符串. 
        ok = 0;
        break;
      }
    }
    if(ok){
      if(!dfs(cur+1)){//如果是困难串,则进行继续深搜.当返回后判断是否已经找够,如果找够了,则结束该层dfs. 没找够则继续往后寻找 
        return 0;
      }
    } 
  }
  return 1; 
} 
int main()
{
  while(scanf("%d %d",&n,&L)!=EOF &&n &&L){
    cnt = 0;
    dfs(0);
  }
  return 0;
}
相关文章
|
6月前
|
测试技术
华为机试HJ98:自动售货系统
华为机试HJ98:自动售货系统
100 1
|
6月前
|
Serverless
华为机试HJ30:字符串合并处理
华为机试HJ30:字符串合并处理
|
6月前
华为机试HJ9:提取不重复的整数
华为机试HJ9:提取不重复的整数
|
7月前
|
Go
Shortest Path with Obstacle( CodeForces - 1547A )(模拟)
Shortest Path with Obstacle( CodeForces - 1547A )(模拟)
28 0
|
8月前
【DFS练习】困难的串
【DFS练习】困难的串
35 0
|
9月前
|
文件存储
Easy Number Challenge(埃式筛思想+优雅暴力)
Easy Number Challenge(埃式筛思想+优雅暴力)
59 0
牛客hot100--BM88---判断是否为回文字符串(入门难度)
牛客hot100--BM88---判断是否为回文字符串(入门难度)
75 0
牛客hot100--BM88---判断是否为回文字符串(入门难度)
|
存储 测试技术
牛客hot100--BM50---两数之和(简单难度)
牛客hot100--BM50---两数之和(简单难度)
100 0
牛客hot100--BM50---两数之和(简单难度)
|
机器学习/深度学习
Codeforces1499——C. Minimum Grid Path(思维+分奇偶+贪心)
Codeforces1499——C. Minimum Grid Path(思维+分奇偶+贪心)
65 0
|
存储 机器学习/深度学习 人工智能
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法
241 0
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法