zoukankan      html  css  js  c++  java
  • UVA 129 Krypton Factor

    题意:

      如果一个字符串包含两个相邻的重复子串,则是简单串,其他的是困难串

      输入n和l,输出由前l个字符组成的,字典序第k小的困难串。每四个字符输出一个空格。输出串后下一行输出它的长度。

    分析:

      选定终点的位置,判断是否是包含连续重复子串,不是则cnt+1。

    代码:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int s[10001];int n,m;
    int cnt;
    int dfs(int cur)
    {
    int i,j,k;
    if(cnt++==n)//cnt为这是第几个困难串,
    {
    for(i=0;i<cur;i++)
    {
    if(i&&i%64==0)
    printf(" ");
    else if(i&&i%4==0)
    printf(" ");
    printf("%c",'A'+s[i]);
    }
    printf(" ");
    printf("%d ",cur);
    return 0;
    }
    for(i=0;i<m;i++)//确定该处放那个字母
    {
    s[cur]=i;
    int ok=1;
    for(j=1;j*2<=cur+1;j++)//判断该串是否含有重复子串
    {
    int flag=1;
    for(k=0;k<j;k++)
    {
    if(s[cur-k]!=s[cur-k-j])
    {
    flag=0;
    break;
    }
    }
    if(flag)
    {
    ok=0;
    break;
    }
    }
    if(ok)
    {
    if(!dfs(cur+1))
    return 0;
    }
    }
    return 1;
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)&&(n||m))
    {
    cnt=0;
    dfs(0);
    }
    }
  • 相关阅读:
    Third practice 3
    Third practice 2
    Third practice 1
    mock模拟get和post请求
    eslint语法检测报错解决办法
    python 入门到实践第四章案例
    python 入门到实践第三章课后练习
    python 入门到实践第三章
    axios拦截器的使用
    axios的实例和模块封装
  • 原文地址:https://www.cnblogs.com/137033036-wjl/p/4856864.html
Copyright © 2011-2022 走看看