Codevs 1018 单词接龙
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。
输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.
只需输出以此字母开头的最长的“龙”的长度
5
at
touch
cheat
choose
tact
a
23
(连成的“龙”为atoucheatactactouchoose)
以后不要用time变量,撞关键字
/*
不知道为什么枚举重合的长度的时候去掉break就A了
把字符串从前面存储一遍,再从后面存储一遍,打包放到结构体里
然后就是深搜,也没怎么剪枝,可能数据太弱
题目没说字符串的最大长度是多少,我就直接用的string
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
int n,tim[],ans;
string start;
struct node{
int len;
map<int,string>h;
map<int,string>t;
string c;
}s[];
void dfs(int pos,int l){
ans=max(ans,l);
if(pos==){
for(int i=;i<=n;i++)
if(s[i].h[]==s[].h[]){
tim[i]++;
dfs(i,s[i].len);
tim[i]--;
}
return;
}
if(tim[pos]>)return;
for(int i=;i<=n;i++){
if(tim[i]<){
for(int j=s[pos].len-;j>=;j--){//枚举重合的长度
if(j>=s[i].len)continue;
if(s[pos].t[j]==s[i].h[j]){
tim[i]++;
dfs(i,l+s[i].len-j);
tim[i]--;
}
}
}
}
}
int main(){
scanf("%d",&n);
string c;
for(int i=;i<=n;i++){
cin>>s[i].c;
s[i].len=s[i].c.length();
string Head;
for(int j=;j<s[i].len;j++){
Head+=s[i].c[j];
s[i].h[j+]=Head;
}
string Tail;
for(int j=s[i].len-,k=;j>=;j--,k++){
Tail+=s[i].c[j];
string T;
int L=Tail.length();
for(int f=L-;f>=;f--)
T+=Tail[f];
s[i].t[k]=T;
}
}
cin>>s[].c;
string Head;Head+=s[].c[];
s[].h[]=Head;
dfs(,);
printf("%d",ans);
}
Codevs 1018 单词接龙的更多相关文章
- 【wikioi】1018 单词接龙
题目链接 算法:DFS+考你阅题 题目描述: 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中 ...
- codevs 1018 [noip 2000 提高] 单词接龙
题目链接:http://codevs.cn/problem/1018/ 题目描述 Description 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母, ...
- 单词接龙(codevs 1018)
2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 单词接龙是一个与我们经 ...
- NOIP2000单词接龙[DFS]
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- Noip2000 T3 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- 洛谷 P1019 单词接龙 Label:dfs
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
- NOIP2000 单词接龙
题三. 单词接龙 (27分) 问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的 ...
- 1172: 单词接龙(XCOJ 暴力DFS)
1172: 单词接龙 时间限制: 1 Sec 内存限制: 128 MB提交: 12 解决: 5 标签提交统计讨论版 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词 ...
- 单词接龙(dragon)
单词接龙(dragon) 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次) ...
随机推荐
- Android-Bundle的说明和用法
1.Bundle类的作用 Bundle类是一种数据载体,类似于Map,用于存放key-value名值对形式的值.相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法, 如:put ...
- 基于EasyDarwin云平台实现的EasyClient客户端与EasyCamera摄像机之间的对讲与云台控制功能
本文转自EasyDarwin团队Kim的博客,感谢Kim长期对EasyDarwin开源项目的贡献:http://blog.csdn.net/jinlong0603 EasyDarwin云平台是一套由E ...
- EasyRTMP实现的一套简单、高效、易用的全平台(Windows/Linux/ARM/Android/iOS)RTMP直播推送库
本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52938980 EasyRTMP介绍 Easy ...
- 九度OJ 1107:搬水果 (贪心)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5190 解决:1747 题目描述: 在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆 ...
- parameters arguments 形式参数 实际参数
parameter和argument的区别 – 笑遍世界 http://smilejay.com/2011/11/parameter_argument/ https://en.wikipedia.or ...
- AbstractFactory Pattern
AbstractFactory模式用来解决这类问题:要创建一组相关或者相互依赖的对象. AbstractFactory Pattern结构图 实现: #ifndef _PRODUCT_H_ #defi ...
- Express中的Ejs模板传值问题
在Ejs模板传值过程中,route下的变量值通过res.sender()中的变量参数传给views, 这时在views中若该变量在javascript代码中使用,可直接使用该变量,不必使用<% ...
- 在oc中一些常用的宏定义总结
1.打印CGRect,Size,Point #define NSLogRect(rect) NSLog(@"%s x:%.4f, y:%.4f, w:%.4f, h:%.4f", ...
- php获取accesstoken和二维码的实现方法
class WeChat{ private $_appid; private $_appsecret; private $_token; public function __construct($_a ...
- vue axios拦截器介绍
关于axios的拦截器是一个作用非常大,非常好用的东西.分为请求拦截器和响应拦截器两种.我一般把拦截器写在main.js里. 1. 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作,例如在每个请 ...