zoukankan      html  css  js  c++  java
  • UVA129 —— Krypton Factor (氪因素)

    Input and Output

    In order to provide the Quiz Master with a potentially unlimited source of questions you are asked to write a program that will read input lines that contain integers n and L (in that order), where n > 0 and L is in the range tex2html_wrap_inline39 , and for each input line prints out the nth hard sequence (composed of letters drawn from the first L letters in the alphabet), in increasing alphabetical order (alphabetical ordering here corresponds to the normal ordering encountered in a dictionary), followed (on the next line) by the length of that sequence. The first sequence in this ordering is A. You may assume that for given n and L there do exist at least n hard sequences.

    For example, with L = 3, the first 7 hard sequences are:

     


    AB 
    ABA 
    ABAC 
    ABACA 
    ABACAB 
    ABACABA

    As each sequence is potentially very long, split it into groups of four (4) characters separated by a space. If there are more than 16 such groups, please start a new line for the 17th group.

    Therefore, if the integers 7 and 3 appear on an input line, the output lines produced should be

     

    ABAC ABA
    7

    Input is terminated by a line containing two zeroes. Your program may assume a maximum sequence length of 80.

     

    Sample Input

     

    30 3
    0 0

     

    Sample Output

     

    ABAC ABCA CBAB CABA CABC ACBA CABA
    28

    题意:如果有一个字符串中包含两个相邻的重复子串,则称作容易的串,其他的则称为困难的串,要求不包含容易的串


    #include <iostream>
    #include <cstdio>
    #include <vector>
    #pragma comment(linker, "/STACK:102400000,102400000")
    using namespace std;
    int cnt ;
    char ma[1100][1100];
    int n, len;
    int  p[100];
    int dfs(int cur)
    {
        if(cnt == n)
        {
            for(int i = 1; i < cur; i++)
            {
                printf("%c",p[i] + 'A' -1);
                if(i == cur - 1)
                    break;
                if(i%4==0)
                {
                    if(i%64==0)
                        putchar('
    ');
                    else
                        putchar(' ');
                }
            }
            printf("
    %d
    ", cur-1);
            return 0;
        }
        for(int i = 1; i <= len; i++)
        {
            p[cur] = i;
            int ok = 1;
            for(int j = 1; j * 2 <= cur+1; j++)  //枚举进行比较
            {
                int flag =1;
                for(int k = 0; k < j; k++)
                {
                    if(p[cur- k] != p[cur-j-k])
                    {
                        flag = 0;
                        break;
                    }
                }
                if(flag )
                {
                    ok =0;
                    break;
                }
            }
            if(ok)
            {
                cnt ++;
                if(!dfs(cur + 1))
                    return 0;
            }
        }
        return 1;
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&len) != EOF)
        {
            cnt = 0;
            if(!n && !len)
                break;
            dfs(1);
        }
        return 0;
    }
    

      

  • 相关阅读:
    【转载】Allegro Auto Rename器件反标注教程
    FPGA代码设计规范整理
    Cadence Allegro导网表的错误问题解决
    简单玩转Excel排序、筛选、分类汇总与数据透视表功能!
    zt一篇教会你写90%的shell脚本
    zt一篇教会你写90%的shell脚本
    TCP协议理解
    zt 改进TCP,阿里提出高速云网络拥塞控制协议HPCC
    zt TCP的困境与解决方案
    ztGoogle's BBR拥塞控制算法如何对抗丢包
  • 原文地址:https://www.cnblogs.com/Przz/p/5409804.html
Copyright © 2011-2022 走看看