1220:单词接龙

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 5368     通过数: 3159

【题目描述】

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

【输入】

输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词(只含有大写或小写字母,长度不超过20),输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在。

【输出】

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

【输入样例】

5
at
touch
cheat
choose
tact
a

【输出样例】

23

【分析】

以样例数据为例,构造两两单词接龙重叠字符矩阵,再根据该矩阵构造递归解答树,如下图

at 可以和 touch 或 tact 相连,长度分为6 或 5,而 touch 则可以和 cheat 或 choose 进行相连,长度为9 或 10,...

以此类推,最长的龙为:atoucheatactactouchoose。注意:每个单词都最多在“龙”中出现两次。

这道题用C++代码要简单一些,有关字符串的代码,用C语言非常困难。

感谢题解:https://www.cnblogs.com/-xiangyang/p/9220236.html

【参考代码】

#include<bits/stdc++.h>
using namespace std;
const int MAXN=50;
string str[MAXN];
int n,used[MAXN];
int ans=0;
int check(string a,string b)//查找想同的部分长度
{int la=a.size(),lb=b.size();int l=min(la,lb);for(int i=1;i<l;i++) {int flag = 1;for (int j = 0; j < i; j++){if(a[la-i+j]!=b[j])flag=0;}if(flag) return i;}return 0;
}
void dfs(string s,int len)
{ans=max(ans,len);for(int i=0;i<n;i++){if(used[i]>=2) continue;int c=check(s,str[i]);if(c>0) {used[i]++;dfs(str[i],len+str[i].size()-c);used[i]--;}}}
int main()
{cin>>n;getchar();for(int i=0;i<n;i++) {cin>>str[i];getchar();used[i]=0;}string s;cin>>s;dfs(' '+s,1);cout<<ans<<endl;return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1220

信息学奥赛一本通(1220:单词接龙)相关推荐

  1. 信息学奥赛一本通 1220:单词接龙 | 1913:【00NOIP普及组】单词接龙 | OpenJudge NOI 2.5 8783 | 洛谷 P1019 [NOIP2000 提高组] 单词接龙

    [题目链接] ybt 1220:单词接龙 ybt 1913:[00NOIP普及组]单词接龙 OpenJudge NOI 2.5 8783:单词接龙 洛谷 P1019 [NOIP2000 提高组] 单词 ...

  2. 信息学奥赛一本通 1185 单词排序

    [题目描述] 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次.(区分大小写) [输入] 一行单词序列,最少1个单词,最多100个单词,每个单词长 ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)

    信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...

  5. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  6. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  7. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  8. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  9. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  10. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

最新文章

  1. python中mod运算符_Python中的数学运算操作符使用进阶
  2. PAT 1037 在霍格沃茨找零钱(20)(代码+思路)
  3. 在 ASP.NET 2.0 中上载文件 —— 解决文件大小限制
  4. 077_html5拖放
  5. js进阶 11-6 jquery如何获取和设置元素的宽高(jquery多方法)
  6. 简述linux虚拟内存的概念,Linux进程虚拟内存中的相关概念
  7. 差分进化算法_基于差分进化的水泥烧成系统动态优化算法
  8. [codevs 1503]愚蠢的宠物(特殊的LCA)
  9. STM32 串口通讯及实现
  10. 进程间通信方式有哪些?
  11. 【PAT甲级】1087 All Roads Lead to Rome 条条大路通罗马
  12. 电子电路:差分放大器分析
  13. 菜鸟入门:Java语言学习
  14. LPC1768的P0.27,P0.28管脚作为GPIO口输出需要外接上拉电阻才能输出高电平
  15. Ubuntu系统出现kernel panic
  16. 汇编程序语言 输入数字n和n个数字并对n个数字排序(带注释)
  17. 密码库LibTomCrypt学习记录——(2.18)分组密码算法的工作模式——XTS代码
  18. 数据库查询显示一年中所有的周一到周五的数据
  19. Java反序列化之反射机制
  20. oracle ola_访谈和书摘:Ola Bini,“实用的JRuby on Rails Web 2.0项目”

热门文章

  1. C++面向对象笔记:构造、析构函数、成员函数
  2. 汇编语言---GCC内联汇编
  3. 崩溃!新浪程序员加班错失 77 万年会大奖
  4. 支付宝用大数据憋死伪基站骗子
  5. android 键盘点击事件监听事件,Android 键盘事件触发以及监听
  6. 你好,面试官 | 你觉得MySQL自增主键连续吗?
  7. 已饱和!未来程序员没活路了...
  8. JetBrains 2020 Java调查报告:中国开发者使用比例最高,Java 8最受欢迎
  9. 在MySql中,这四种方法可以避免重复插入数据!
  10. 阿里工程师是如何系统化地总结缓存相关知识的