1018 单词接龙

2000年NOIP全国联赛普及组NOIP全国联赛提高组

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 查看运行结果
 
 
题目描述 Description

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。

输入描述 Input Description

输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.

输出描述 Output Description

只需输出以此字母开头的最长的“龙”的长度

样例输入 Sample Input

5

at

touch

cheat

choose

tact

a

样例输出 Sample Output

23

数据范围及提示 Data Size & Hint

(连成的“龙”为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);
}

最新文章

  1. linux下解压
  2. Map小结
  3. apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
  4. Linux 之安装文件
  5. CE5 WiFi开关
  6. QuickStart OpenvirteX
  7. QT5.3+VS2013+QCustomPlot+QwtPlot+QwtPlot3D使用环境配置
  8. ThinkPad指纹验证在win7无法使用的解决方法
  9. scrollview 例子2
  10. A*寻路算法的探寻与改良(一)
  11. &lt;转&gt;Python的内存泄漏及gc模块的使用分析
  12. 新手学习.net编程计划-1
  13. js控制父子页面传值(iframe和window.open)
  14. Redis轻快入门
  15. 在网页标题栏title加入图标?
  16. JAVA Number与Math类
  17. CetenOS 6.9 搭建hubot运维机器人
  18. [转]CentOS6 Linux上安装ss5服务器
  19. hive 表类型
  20. https://www.testingcircus.com/tell-me-about-yourself-6-sample-answers-software-testers/

热门文章

  1. ZOJ 3551 Bloodsucker &lt;概率DP&gt;
  2. exp/imp三种模式——完全、用户、表
  3. 【C++基础学习】Vector
  4. 【Effective C++】资源管理
  5. Mac下eclipse的快捷键
  6. STM32 ~ 外扩SRAM
  7. UVa 11572 唯一的雪花(优化策略)
  8. scroll或是其子类被添加进view时,界面自动上移
  9. PYTHON 爬虫笔记三:Requests库的基本使用
  10. java反射技术实例