hihocoder1618 单词接龙
#1618 : 单词接龙
描述
给定一个单词字典和一个起始字母。小Hi需要从起始字母开始,每次再加上一个字母,生成长度为2、3、4……的单词;并且保证每个生成的单词都在字典中。
求能生成的最长单词的长度。
例如字典是{h, ho, hi, iho, hiho, hihocoder}, 起始字母是h,那么可以通过h-ho-iho-hiho得到长度为4的单词。
输入
第一行包含一个整数N和一个小写字母c。
第二行包含N个空格分开的由小写字母组成的单词单词。保证起始字母c在字典中。
对于30%的数据,1 ≤ N ≤ 100,单词长度之和 ≤ 10000
对于100%的数据,1 ≤ N ≤ 10000,单词长度之和 ≤ 1000000
输出
能生成的最长单词的长度
- 样例输入
-
6 h
hihocoder h ho hi hiho iho - 样例输出
-
4
找错ing
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int maxn=;
int Next[maxn][],End[maxn],fail[maxn],h[maxn],red[maxn];
int cnt,root=,ans;
int q[],tail,head;
char c[maxn] ,S;
void _init()
{
ans=;cnt=;fail[root]=-;
head=tail=;End[root]=;
for(int i=;i<;i++) Next[root][i]=;
}
void _insert(char s[])
{
int L=strlen(s);
int Now=root;
for(int i=;i<L;i++){
if(!Next[Now][s[i]-'a']) {
Next[Now][s[i]-'a']=++cnt;
fail[cnt]=;End[cnt]=;
for(int i=;i<;i++) Next[cnt][i]=;
h[cnt]=h[Now]+;
}
Now=Next[Now][s[i]-'a'];
}
End[Now]=;
}
void _build()
{
q[++head]=root;
while(tail<head){
int Now=q[++tail];
if(red[fail[Now]]&&End[Now]&&h[fail[Now]]+==h[Now]){
if(h[Now]>ans) ans=h[Now];
red[Now]=;
}
for(int i=;i<;i++){
if(red[Now]&&End[Next[Now][i]]) {
red[Next[Now][i]]=;
ans=max(ans,h[Next[Now][i]]);
}
if(Next[Now][i]){
if(Now==root) fail[Next[Now][i]]=root;
else{
int p=fail[Now];
while(p){
if(Next[p][i]){
fail[Next[Now][i]]=Next[p][i];
break;
}
p=fail[p];
}
if(!p) {
fail[Next[Now][i]]=root;
}
}
q[++head]=Next[Now][i];
}
}
}
} int main()
{
char s[maxn];
int n,i;
_init();
scanf("%d",&n);
cin>>S;
for(i=;i<=n;i++){
scanf("%s",s);
_insert(s);
}
red[Next[root][S-'a']]=;
ans=;
_build();
printf("%d\n",ans);
return ;
}
hihocoder1618 单词接龙的更多相关文章
- NOIP2000单词接龙[DFS]
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- Noip2000 T3 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- 洛谷 P1019 单词接龙 Label:dfs
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- 【wikioi】1018 单词接龙
题目链接 算法:DFS+考你阅题 题目描述: 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中 ...
- NOIP2000 单词接龙
题三. 单词接龙 (27分) 问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的 ...
- 1172: 单词接龙(XCOJ 暴力DFS)
1172: 单词接龙 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 5 标签提交统计讨论版 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词 ...
- 单词接龙(dragon)
单词接龙(dragon) 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次) ...
- NOIP2000提高组 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- 洛谷 P1019 单词接龙【经典DFS,温习搜索】
P1019 单词接龙 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在 ...
随机推荐
- Asp.Net Core 2.0 WebUploader FastDfs 文件上传 分段上传
功能点: 1. 使用.net core 2.0 实现文件上传 2. 使用webuploader实现单文件,多文件上传 3. 使用webuploader实现大文件的分段上传. 4. 使用webuploa ...
- javascript 跨域访问
JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.因为同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象. 下表给出了相对 http://si ...
- vcf2maf
1.https://github.com/mskcc/vcf2maf 2.https://github.com/cbare/vcf2maf
- JavaScript高级程序设计-读书笔记(6)
第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l 简单值:使用与JavaScript相同的语法,可以在JS ...
- 关于ckeditor 之 上传功能
度了很多文章,看了很多关于ckeditor配置上传功能的文章,没一个写得清楚的, 就是简单的根目录下.config.js 增加 config.filebrowserUploadUrl="/a ...
- max_spare_servers到底是个什么意思?
pm.max_children=500pm.start_servers=280pm.min_spare_servers=50pm.max_spare_servers=500 把max_spare_se ...
- mysql数据库优化课程---18、mysql服务器优化
mysql数据库优化课程---18.mysql服务器优化 一.总结 一句话总结: 1.四种字符集问题:字符集都设置为utf-82.slow log慢查询日志问题3.root密码丢失 1.mysql存在 ...
- MySQL之长连接、短连接、连接池
当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信.客户端必须使用数据库连接来发送命令和接收应答.数据.通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了. ...
- Spring Cloud实战
Spring Cloud实战(一)-Spring Cloud Config Server https://segmentfault.com/a/1190000006149891 https://seg ...
- Java中Collection 的基本认识
集合Conllection的基本概念:1.集合的基本认识:如StringBuffer&StringBuilder是集合(存储的对象类型是String).数组.对象与其很相似,但是还有区别.2. ...