题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

本题我本来打算在深搜的时候在处理两个单词的相交部分,但发现预处理一下会更好

要注意使用string变量求其长度与char变量求长度有所不同;

string a;  int length=a.size();     //注意此处不是size(a),一开始我在VScode上编译竟没报错,然后提交洛谷评测,成功CE。。。

char a;  int length=strlen(a);

代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #include<string>
 7 using namespace std;
 8 #define maxn 1010
 9 #define ll long long
10 #define IL inline
11 #define clear(a) memset(a,0,sizeof a)
12 IL void read(int &x)
13 {
14     x = 0;int f = 1;char ch = getchar();
15     while(ch<'0'||ch>'9'){if(ch=='-')f = -f;ch = getchar();}
16     while(ch>='0'&&ch<='9'){x = x * 10 + ch - '0', ch = getchar();}x *= f;
17 }
18
19 int n, ans;
20 char head;
21 int color[maxn], used[maxn];
22 int contact[maxn][maxn];
23 string z[maxn];
24
25 void solve(int x,int y)
26 {
27     for (int i = 1; i <= min(z[x].size(), z[y].size()) - 1; i++)
28     {
29         int lazy = 0;
30         int pry = 0;
31         for (int j = z[x].size() - i; j <= z[x].size() - 1;j++)
32         {
33             if(z[x][j]==z[y][pry])
34                 pry++;
35             else
36             {
37                 lazy = 1;
38                 break;
39             }
40         }
41         if(lazy)
42             continue;
43         else
44         {
45             contact[x][y] = i;
46             break;
47         }
48     }
49 }
50
51 void dfs(int id,int length)
52 {
53     ans = max(ans, length);
54     for (int i = 1; i <= n;i++)
55     {
56         if(color[i]>=2)
57             continue;
58         if(contact[id][i])
59         {
60             color[i]++;
61             dfs(i, length+z[i].size()-contact[id][i]);
62             color[i]--;
63         }
64     }
65     ans = max(ans, length);
66 }
67
68 int main()
69 {
70     read(n);
71     for (int i = 1; i <= n;i++)
72         cin >> z[i];
73     cin >> head;
74     for (int i = 1; i <= n;i++)
75         for (int j = 1; j <= n;j++)
76             solve(i, j);
77     for (int i = 1; i <= n; i++)
78         if (z[i][0] == head)
79         {
80             color[i] = 1;
81             dfs(i, z[i].size());
82             color[i] = 0;
83         }
84     cout << ans;
85     return 0;
86 }

转载于:https://www.cnblogs.com/KGW-/p/10367997.html

洛谷P1019 单词接龙相关推荐

  1. 洛谷 P1019 单词接龙 (DFS)

    题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...

  2. 洛谷 P1019 单词接龙 Label:dfs

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  3. 洛谷——P1019 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  4. 洛谷 P1019 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  5. 洛谷 [P1019 单词接龙] {搜索|DFS} 奋斗的珂珂~

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  6. 【搜索】NOIP2000 or 洛谷1019单词接龙

    题目链接:洛谷1019 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在 ...

  7. luogu P1019 单词接龙 题解

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

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

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

  9. 深度优先搜索——单词接龙(洛谷 P1019)

    题目选自洛谷P1019 首先在题意上可能有些误解. 两个单词合并时,合并部分取的是最小重叠部分 相邻的两部分不能存在包含关系就是说如果存在包含关系,就不能标记为使用过. 每个单词最多出现两次. (其实 ...

最新文章

  1. Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态链接文件依赖
  2. python导入txt为dataframe-python读取文本中数据并转化为DataFrame的实例
  3. java oracle 字符_Oracle转义字符
  4. 子函数的指针释放问题
  5. 最小连通-(代码、分析、汇编)
  6. 线程池三种创建方式和自定义线程池ThreadPoolExecutor
  7. 如何选择bfs和dfs
  8. linux usb免驱麦克风,Android无驱usb音频实现
  9. Ubuntu环境下的VirtualBox,连接Redhat虚拟机的步骤
  10. if(){}else{}层数太多,提出来另写一个方法
  11. linux运维工程师的发展,Linux运维工程师发展前景
  12. 中科院计算机研究方向-考研导师选择的一些建议
  13. 桌面版whatsapp自动发送实例分析
  14. skimage图像加噪声
  15. 黑马12期配套15年6天hadoop培训
  16. 调整report_timing输出格式
  17. 杭州公积金修改手机号信息
  18. iOS苹果内购详细步骤
  19. routeDone with a webviewId 12 that is not the current page(env: Windows,mp,1.06.2301040; lib: 2.30.0
  20. css 恢复ulli_CSS Ul(列表样式)

热门文章

  1. 计算机硬件假故障,计算机硬件故障
  2. 100个网络基础知识,赶紧收藏吧!
  3. 20 个最常用的 Git 命令用法说明及示例
  4. 由浅入深,聊聊权限设计
  5. 摩托罗拉v8对讲机驱动软件_摩托罗拉数字机如何设置“个性”提示音
  6. python数据可视化源码_Python数据分析:基于Plotly的动态可视化绘图 随书源码[101MB]...
  7. android 属性动画变大,Android PropertyAnimation 属性动画(一)初探
  8. 项目一感应垃圾桶(Wemos)
  9. 嵌入式C语言基础链表
  10. php添加项目,thinkphp添加一个项目