UVa 129 Krypton Factor:回溯好题

129 - Krypton Factor

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=65

You have been employed by the organisers of a Super Krypton Factor Contest in which contestants have very high mental and physical abilities. In one section of the contest the contestants are tested on their ability to recall a sequence of characters which has been read to them by the Quiz Master. Many of the contestants are very good at recognising patterns. Therefore, in order to add some difficulty to this test, the organisers have decided that sequences containing certain types of repeated subsequences should not be used. However, they do not wish to remove all subsequences that are repeated, since in that case no single character could be repeated. This in itself would make the problem too easy for the contestants. Instead it is decided to eliminate all sequences containing an occurrence of two adjoining identical subsequences. Sequences containing such an occurrence will be called ``easy''. Other sequences will be called ``hard''.

For example, the sequence ABACBCBAD is easy, since it contains an adjoining repetition of the subsequence CB. Other examples of easy sequences are:

BB

ABCDACABCAB

ABCDABCD

Some examples of hard sequences are:

D

DC

ABDAB

CBABCBA

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

, 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:

A 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.

本文URL地址:http://www.bianceng.cn/Programming/sjjg/201410/45370.htm

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

树型搜索。回溯之。

都写在注释里了。

完整代码:

/*0.015s*/

#include<cstdio>  

int n, L, cnt;
int S[100];  

int dfs(int cur)  // 返回0表示已经得到解,无须继续搜索
{
    if (cnt++ == n)
    {
        for (int i = 0; i < cur; i++)
        {
            if (i)
            {
                if (i % 64)
                {
                    if (i % 4 == 0) putchar(' ');
                }
                else putchar(10);
            }
            putchar('A' + S[i]); // 输出方案
        }
        printf("\n%d\n", cur);
        return 0;
    }
    for (int i = 0; i < L; i++)
    {
        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])
                {
                    equal = 0;
                    break;
                }
            if (equal)
            {
                ok = 0;    // 后一半等于前一半,方案不合法
                break;
            }
        }
        if (ok && !dfs(cur + 1)) return 0; // 递归搜索。如果已经找到解,则直接退出
    }
    return 1;
}  

int main()
{
    while (scanf("%d%d", &n, &L), n)
    {
        cnt = 0;
        dfs(0);
    }
    return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, and
, krypton
, of
, sequence
, The
that
uva129、krypton、krypton toolkit、krypton toolkit 官网、kodi master krypton,以便于您获取更多的相关知识。

时间: 2024-05-20 01:44:17

UVa 129 Krypton Factor:回溯好题的相关文章

UVa 10034:Freckles (最小生成树模板题)

链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=975 题目: Problem A: Freckles In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo

UVa 105 The Skyline Problem (想法题)

105 - The Skyline Problem Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=41 这题有个很巧的思路:离散化. 什么意思呢?既然每栋大楼的高和左右边界都是整数,那么不妨把线段用一个个整点表示.既然最后只求一个轮廓,那么对每个横坐标,就记

UVa 12036 Stable Grid:想法题

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=3187 表示想复杂了..其实只要统计是否有一个数字出现大于n次就no啊orz 完整代码: 01./*0.042s*/ 02. 03.#include<cstdio> 04.#include<cstring> 05. 06.int cnt[

UVa 12502 Three Families:想法题

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=3946 哈哈.考想法的一道题. 首先注意到这句话:You may assume both families were cleaning at the same speed. 所以按理来说,(样例1中)本应该周末每个家庭都花3小时来清理花园,但A在忙完自己的一部分

UVa 696 How Many Knights (想法题)

696 - How Many Knights Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php? option=onlinejudge&page=show_problem&problem=637 The knight is a piece used in chess, a game played on a board with squares arranged in rows and columns. A knig

uva 11218 - KTV 简单回溯

   感觉有比回溯更加高效的方法,但是水平不够,只会回溯 /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include

uva 10624 Super Number 回溯

  暴力回溯,用位运算加个奇偶剪枝   注意取余的效率,因为取余实在太慢了,所以要最少的进行取余运算,所以就是每19位进行次取余,这样1s内就过了 /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <stdio.h> int ans[50]; char nok(int now) { int i,

UVa 539:The Settlers of Catan, 简单回溯

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=480 题目类型: 回溯法 原题: Within Settlers of Catan, the 1995 German game of the year, players attempt to dominate an island by buildi

UVa 11218:KTV, Rujia Liu的神题(一)

链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=112&page=show_problem&problem=2159 类型:   暴力回溯 原题: One song is extremely popular recently, so you and your friends decided to sing it in KTV. The song has 3 c