西安邀请赛D题 字符串生成题 深搜

很抱歉,学校的OJ并不支持外网,而且还没有加上题目。。。

题意是说,求一个字符串,他的所有长度超过4的子串都是唯一的。

然后我当时是想aaaa, baaa, caaa, daaa...这样巴拉巴拉一直生成下去的,后来发现真的是想的太天真了,因为前面的两个长度为4的子串(“aaaabaaa”)的存在,直接封杀了3个子串(“aaab”, “aaba”, "abaa”)。然后我就想记录状态去试着暴力去跑一个生成机。其实也很简单,就是四位一生成的原理,对所有的都尝试,不断地深搜,并且记录状态。

然后竟然过了!不可思议。

代码:

/****
	*@author    Shen
	*@title     西安邀请赛D
	*/

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const char* alpha = "abcdefghijklmnopqrstuvwxyz";
const int asz = 26;
const int maxN = 500000;
int maxS, len, s, state[4 * asz + 13];
char result[maxN];

int dfs(int curr, int prev)
{
    if (len >= maxN) return 0;
    if (curr > 4)//catch char
    {
        if (4 % prev == 0)
        {
            for (int i = 1; i <= prev; i++)
            {
                result[len++] = state[i];
                if (len >= maxN) break;
            }
        }
    }
    else
    {
        int stateID = state[curr - prev];
        state[curr] = stateID;
        dfs(curr + 1, prev);
        for (int i = stateID + 1; i < 26; i++)
        {
            state[curr] = i;
            dfs(curr + 1, curr);
        }
    }
    return 0;
}

inline void addStringaaa()
{
    result[len] = result[len + 1] = result[len + 2] = 'a';
    result[len + 3] = '\0';
    maxS = len + 3;
}

void solve()
{
    if (s > maxS) puts("Impossible");
    else
    {
        for (int i = 0; i < s; i++)
            printf("%c", result[i]);
        puts("");
    }
}

int main()
{
    dfs(1, 1);
    for (int i = 0; i < len; i++)
        result[i] = alpha[result[i]];
    addStringaaa();
    while (~scanf("%d", &s))
        solve();
    return 0;
}

西安邀请赛D题 字符串生成题 深搜

时间: 2024-08-29 00:09:45

西安邀请赛D题 字符串生成题 深搜的相关文章

Farm Irrigation_深搜_并查集

Farm Irrigation TimeLimit: 2000/1000 MS (Java/Others)  MemoryLimit: 65536/32768 K (Java/Others) 64-bit integer IO format:%I64d Problem Description Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot of

HDU 1036 Robot Motion 深搜

 Description A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions are N north (up the page) S south (down the page) E east (t

【日常学习】【深搜】codevs2452 扫雷题解

题目来源:05年四川省选 转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 题目描述 Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余"人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目.现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷, 由于第一列的雷可能有多种方案

西安邀请赛A题 字符串基本处理

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... 题意很简单,就是给一个文章,关于那个作死狗DOGE,问文章中出现了多少个DOGE,不考虑大小写. 然后就很粗暴的用toupper判断了,毫无难度. 代码如下: /**** *@author Shen *@title 西安邀请赛A */ #include <cctype> #include <cstdio> using namespace std; const int maxLen = (1 << 16); cha

【题解整理】西安邀请赛部分题题解

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... A 字符串基本处理 http://blog.csdn.net/polossk/article/details/27113175 B 状态压缩加剪枝,但是我们没敢做 C 单源点最短路 http://blog.csdn.net/polossk/article/details/27113385 D 字符串生成器 深搜 http://blog.csdn.net/polossk/article/details/27120395 J 状态压缩DP h

西安邀请赛J题 状态压缩DP

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数.它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构.host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善.界面友好.软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量

西安邀请赛C题 单源点最短路

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27109035 一.实体完整性定义 [例1]将Student表中的Sno属性定义为码. CREATE TABLE Student ( Sno CHAR(10) PRIMARY KEY, /*在列定义主码*/ Sname CHAR(20) NOT NULL, Sage SMALLINT ); 或者: CREATE TABLE Student ( Sno CHAR(10

sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)

n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you will step into a distinctive battleground which is full of sweet and happiness. If you want to win the battle, you must do warm-up according to my inst

1001 字符串“水”题

1001: 字符串“水”题 时间限制: 1 Sec  内存限制: 128 MB提交: 210  解决: 39[提交][状态][讨论版] 题目描述 给出一个长度为 n 的字符串(1<=n<=100000),求有多少个连续字串中所有的字母都出现了偶数次. 输入 第一行一个正整数 T,表示数据组数(1 <= T <= 10). 接下来 T 行,每行有一个只包含小写字母的字符串. 输出 每个答案输出满足要求字符串个数.每个答案占一行. 样例输入 3 a aabbcc abcabc 样例输出