HDU 4850 Wow! Such String!

题目链接

题意:求50W内的字符串。要求长度大于等于4的子串,仅仅出现一次

思路:须要推理。考虑4个字母的字符串,一共同拥有26^4种,这些由这些字符串。假设一个字符串末尾加上一个字符。能够变成还有一个字符串的话,就当作这有一条边,每多一个字符多一个结点,那么对于这道题目,一共就能有26^4 + 3条边,在加上尾巴能够多放3个,一共是26^4+3个边。这些边所有连起来就是要的字符串,这样就能够知道每一个节点会经过的次数为26,这样就仅仅要考虑怎样把这些节点串起来,形成一个欧拉道路就可以,这样情况是最大的。选一个起始点aaa,不断往后走,每次选择被占用最少的节点去走,边都标记掉,然后要有一个注意点,就是因为是从aaa開始走。最后必须回到aaa。所以要让选择a这条边的优先级变成最小,不然假设先被占用了就无法构成了

代码:

#include <cstdio>
#include <cstring> const int N = 20005;
int vis[N], vis2[N][30], on = 0;
char out[500005]; int getnext(int x, int a) {
return x % (26 * 26) * 26 + a;
} void init() {
int now = 0;
for (int i = 0; i < 3; i++)
out[on++] = 'a';
while (true) {
int Min = 26, iv = 0;
for (int i = 1; i < 26; i++) {
if (vis2[now][i]) continue;
int tmp = getnext(now, i);
if (vis[tmp] < Min) {
Min = vis[tmp];
iv = i;
}
}
int tmp = getnext(now, iv);
if (vis[tmp] == 26) break;
vis2[now][iv] = 1;
now = tmp;
vis[now]++;
out[on++] = now % 26 + 'a';
}
} int n; int main() {
init();
while (~scanf("%d", &n)) {
if (n > 456979) printf("Impossible\n");
else printf("%s\n", (out + 456979 - n));
}
return 0;
}

HDU 4850 Wow! Such String!(欧拉道路)的更多相关文章

  1. hdu 4850 Wow! Such String! 欧拉回路

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4080264.html 题目链接:hdu 4850 Wow! Such String! 欧拉回 ...

  2. HDU 4850 Wow! Such String!

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4850 题意:给定一个N(1 ≤ N ≤ 500000),构造一个长度为N的小写字母字符串,要求所有长度大于 ...

  3. hdu 4850 Wow! Such String!(字符串处理,yy)

    题目 参考了博客http://blog.csdn.net/u013368721/article/details/37575165 //用visit[26][26][26][26]来判断新家新区的子母河 ...

  4. Nyoj42 一笔画问题 (欧拉道路)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目链接 #include <cstdio> #include <cstring ...

  5. POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)

    http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...

  6. UVA-10129 Play on Words (判断欧拉道路的存在性)

    题目大意:给出一系列单词,当某个单词的首字母和前一个单词的尾字母相同,则这两个单词能链接起来.给出一系列单词,问是否能够连起来. 题目分析:以单词的首尾字母为点,单词为边建立有向图,便是判断图中是否存 ...

  7. UVA 10441 - Catenyms(欧拉道路)

    UVA 10441 - Catenyms 题目链接 题意:给定一些单词,求拼接起来,字典序最小的,注意这里的字典序为一个个单词比过去,并非一个个字母 思路:欧拉回路.利用并查集判联通,然后欧拉道路判定 ...

  8. UVA10129———欧拉道路

    题目 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如 acm,malform,mouse).每个单词最多包含1000 ...

  9. Uva 10129 - Play on Words 单词接龙 欧拉道路应用

    跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...

随机推荐

  1. HDU - 4514 湫湫系列故事——设计风景线(并查集判环)

    题目: 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n ...

  2. [Python3网络爬虫开发实战] 1.7.1-Charles的安装

    Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具. 1. 相关链接 官方网站:https://www.charles ...

  3. Linux高阶命令进阶

    1. 输出重定向 > (1>):覆盖输出,会覆盖掉原先的文件内容 >> (1>>) :追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加 2> :错误输 ...

  4. mysql8忘记登录密码时,修改密码方法

    一.停止mysqld进程 systemctl stop mysqld.service 二.修改/etc/my.cnf(在mysqld选项添加skip-grant-tables),设置免密码登录: vi ...

  5. java 常用集合类型--以及其特性

    1:集合:   (1) Collection(单列集合)        List(有序,可重复)            ArrayList                底层数据结构是数组,查询快,增 ...

  6. atom 安装插件列表

    插件列表 atom-beautify docblockr autocomplete-python goto-definition platformio-ide-terminal symbols-tre ...

  7. 修改 root密码

    sudo su #切换到root账户sudo passwd root  #输入密码

  8. django找不到报错 ‘zsh: command not found: django-admin.py’

    >>python -m django --version >> 1.11.4 说明django安装成功,但是django-admin 报错 ‘zsh: command not ...

  9. Django:(4)Django和Ajax

    向服务器发送请求的途径: 1. 浏览器地址栏,默认get请求 2. form表单: get请求: post请求 3. a标签,默认get请求 4. Ajax:get请求:post请求 Ajax的特点( ...

  10. 【Java集合】Java中集合(List,Set,Map)

    简介: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集 ...