博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP2000提高组 单词接龙
阅读量:6456 次
发布时间:2019-06-23

本文共 1386 字,大约阅读时间需要 4 分钟。

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1: 5 at touch cheat choose tact a

输出样例#1: 23           (连成的“龙”为atoucheatactactouchoose)  

这道题是一道字符串类型的搜索,从数据上可以看出直接暴力搜索就可以了。 主要的思路是以固定字符开头,然后逐个递归枚举调用数小于2的串进行匹配,如果可以就连上并看看是否能够更新最长,最后遍历出最结果。

上代码:

1 #include
2 #include
3 #include
4 using namespace std; 5 int n,note[21],maxl; 6 char a[21][21]; 7 bool can(int i,int j,int k){ 8 for(int p=0;p<=strlen(a[i])-j-1;p++)//字符串从0开始存 9 if(a[i][j+p]!=a[k][p]||p>=strlen(a[k])-1)10 return 0;11 return 1;12 }13 void dfs(int i,int j,int l){14 if(l>maxl)15 maxl=l;16 for(int k=1;k<=n;k++)17 if(note[k]<=1&&can(i,j,k)){18 note[k]++;19 for(int len=1;len<=strlen(a[k])-1;len++)//字符串从0开始存 20 dfs(k,len,l+strlen(a[k])-strlen(a[i])+j);21 note[k]--;22 }23 }24 int main(){25 scanf("%d",&n);26 for(int i=1;i<=n;i++)27 scanf("%s",a[i]);28 cin>>a[0][0];29 dfs(0,0,1);30 printf("%d",maxl);31 return 0;32 }

 

转载于:https://www.cnblogs.com/circlegg/p/6551573.html

你可能感兴趣的文章
Matplot相关(二)——统计图
查看>>
中间件
查看>>
WCF 第二章 契约 总结
查看>>
仿淘宝使用flex布局实现页面顶部和底部的固定布局
查看>>
我的Android进阶之旅------>Android之选项卡(TabHost)的功能和用法
查看>>
sqlserver 存入DB中的中文乱码
查看>>
性能测试初期需要做的准备
查看>>
理解 Redis(4) - 关于 string 的更多命令(SETEX, SETNX, INCR, DECR, MSET...)
查看>>
带你感受小而美的看板协作工具leangoo的魅力
查看>>
5分钟搞定jQuery+zepto.js+面向对象插件
查看>>
接口调试
查看>>
XPsp3键盘设备链/栈信息_01_Code
查看>>
滚动条样式属性,以及去掉移动端滚动条解决方案
查看>>
cookie-小总结吧
查看>>
python3自动获取网站的cookie
查看>>
[编译器]dev c++单步调试
查看>>
React从0到1--新的 React 组件
查看>>
4-08
查看>>
Jira使用说明文档
查看>>
Python中的单例模式的几种实现方式的及优化
查看>>