题目链接:https://ac.nowcoder.com/acm/contest/248/C

题目大意:

  略

分析:

  注意点:1.前缀和后缀的公共部分应该选最短的。2.如果两个字符串前缀和后缀的公共部分恰好是其中一个字符串,那么这两个字符串不能合并。

代码如下:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 #define rep(i,n) for (int i = 0; i < (n); ++i)
 5 #define For(i,s,t) for (int i = (s); i <= (t); ++i)
 6 #define rFor(i,t,s) for (int i = (t); i >= (s); --i)
 7 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
 8 #define rforeach(i,c) for (__typeof(c.rbegin()) i = c.rbegin(); i != c.rend(); ++i)
 9
10 #define pr(x) cout << #x << " = " << x << "  "
11 #define prln(x) cout << #x << " = " << x << endl
12
13 #define ALL(x) x.begin(),x.end()
14 #define INS(x) inserter(x,x.begin())
15
16 #define ms0(a) memset(a,0,sizeof(a))
17 #define msI(a) memset(a,inf,sizeof(a))
18
19 #define pii pair<int,int>
20 #define piii pair<pair<int,int>,int>
21 #define mp make_pair
22 #define pb push_back
23 #define fi first
24 #define se second
25
26 inline int gc(){
27     static const int BUF = 1e7;
28     static char buf[BUF], *bg = buf + BUF, *ed = bg;
29
30     if(bg == ed) fread(bg = buf, 1, BUF, stdin);
31     return *bg++;
32 }
33
34 inline int ri(){
35     int x = 0, f = 1, c = gc();
36     for(; c<48||c>57; f = c=='-'?-1:f, c=gc());
37     for(; c>47&&c<58; x = x*10 + c - 48, c=gc());
38     return x*f;
39 }
40
41 typedef long long LL;
42 const int maxN = 1e5 + 7;
43
44 int n, ans;
45 string str[21];
46 vector< pii > nexts[21];
47 int cnt[21];
48 string st;
49
50 // Common prefix and suffix
51 int CPS(int x, int y) {
52     int ret = 0, i = str[x].size()-1, j = 1;
53
54     while(i >= 0 && j < str[y].size()){
55         if(str[x].substr(i, str[x].size()) == str[y].substr(0, j)) {
56             ret = j;
57             break;
58         }
59         --i;
60         ++j;
61     }
62     if(ret == str[x].size() || ret == str[y].size()) ret = 0;
63     return ret;
64 }
65
66 void dfs(int x, int ret) {
67     bool flag = true;
68     rep(i, nexts[x].size()) {
69         int nt = nexts[x][i].se;
70         if(cnt[nt] >= 2) continue;
71         flag = false;
72
73         ++cnt[nt];
74
75         dfs(nt, ret + str[nt].size() - nexts[x][i].fi);
76
77         --cnt[nt];
78     }
79     if(flag) ans = max(ans, ret);
80 }
81
82 int main(){
83     scanf("%d", &n);
84     For(i, 1, n) cin >> str[i];
85     cin >> st;
86     For(i, 1, n) {
87         For(j, 1, n) {
88             int t = CPS(i, j);
89             if(t) nexts[i].push_back(mp(t, j));
90         }
91     }
92     For(j, 1, n) {
93         if(st[0] == str[j][0])nexts[0].push_back(mp(0, j));
94     }
95     dfs(0, 0);
96
97     printf("%d\n", ans);
98     return 0;
99 }

View Code

转载于:https://www.cnblogs.com/zaq19970105/p/10753006.html

NOIP2000提高组复赛C 单词接龙相关推荐

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

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

  2. P1019 [NOIP2000 提高组] 单词接龙

    P1019 [NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 整体思路:1.先将每个单词与另外的单词重叠的部分算出来记作yc[][]: 2.然后 ...

  3. NOIP2010 提高组 复赛 translate 机器翻译

    NOIP2010 提高组 复赛 translate 机器翻译 1.读题,很快弄明题意,单词不在内存中就查字典,统计查字典次数. 2.内存采用队列方式.统计进队列次数,即为查询次数. 3.程序很快编好, ...

  4. 凡人升天传7——NOIP2010 提高组复赛题解

    本蒟蒻在考试时最后一道直接报零*__*,悲痛欲绝,因此在这里著下本题解. 可恶的西西弗 虽然题目做的很垃圾,但在写题解中途不得不感叹除了最后一道,其他真是好水题呀!!! --------------- ...

  5. 信息学奥赛一本通 1820:【00NOIP提高组】进制转换 | 洛谷 P1017 [NOIP2000 提高组] 进制转换

    [题目链接] ybt 1820:[00NOIP提高组]进制转换 洛谷 P1017 [NOIP2000 提高组] 进制转换 注意:两OJ上题目内容相同,输入输出要求不同 [题目考点] 1.数制 [解题思 ...

  6. 洛谷——P1017 [NOIP2000 提高组] 进制转换(C++)

    洛谷--P1017 [NOIP2000 提高组] 进制转换(C++) 前言 前几天才参加了第十三届蓝桥杯比赛,发现居然有两道于进制相关的题,而且那道编程题--X进制减法,别说做了,题都看不懂,真的是枯 ...

  7. 洛谷P1017题解 [NOIP2000 提高组] 进制转换

    原文地址:https://luvletter.blog.luogu.org/p1017-ti-jie P1017 [NOIP2000 提高组] 进制转换 题目描述 我们可以用这样的方式来表示一个十进制 ...

  8. NOIP2013 提高组复赛解题报告

    NOIP2013 提高组复赛 day1 day\;1 1002. 火柴排队 贪心+数据结构/归并排序 这个"相邻交换"让我联想到了NOIP2012_day1_task2_game那 ...

  9. NOIP 2008 提高组 复赛 message 传字条

    NOIP 2008 提高组 复赛 message 传字条 1.样例很快模拟成功,但感觉是凑出来的,没有章法. 2.深度优先遍历,但感觉容易超时. 3.动态规划?翻看他人代码,发现动态规划的写法,确实想 ...

最新文章

  1. 如何使用阿里云容器服务保障容器的内存资源质量
  2. python的文件操作os_python文件、文件夹操作OS模块
  3. windows下运用git bash 通过ssh方式连接到git server
  4. 利用idea构建hibernate
  5. go下载指定版本的依赖包
  6. text mesh pro html,TextMesh Pro 超链接解析失败
  7. excel调用python编程-超简单:用Python让Excel飞起
  8. mybatis源码-plugin源码
  9. 安徽外国语学院计算机毕业大补考,学生缓考、补考及重修最终成绩计算办法
  10. iOS 使用AFNetworking-----cpf
  11. DHCP 实现动态 IP 上网简析
  12. C# GDI画图系列(五) 添加文字和导出图片等附加功能
  13. 十部门发促消费“24条”:提高相对低收入群体待遇
  14. HTTPS升级配合HSTS打造顶级安全网站
  15. python视频口碑佳_《囧妈》口碑扑街?Python告诉你,为何这次观众不买账了
  16. [面经]阿里游戏一面的算法题
  17. 反垃圾邮件网关该如何选型考量
  18. 巨龙信息大数据集成系统 多元数据汇聚的一站式集成治理
  19. 客户同情和客户同理心的区别
  20. 魔镜VR导出Android工程

热门文章

  1. 关于Asp.Net开发中导入外部JavaScript文件的问题
  2. 逝去的大学生活自己丢了什么
  3. java dubbo 方案,Missing artifact com.alibaba:dubbo:jar:2.8.4 dubbo解决方案
  4. java web转码_javaweb后台转码
  5. 用python自制背单词程序_c++自制背单词应用
  6. 华为5720设置静态路由不通_【干货分享】交换机与路由器在环路中的处理机制了解一下!...
  7. 计算机应用 winxp,2017年职称计算机考试模块WindowsXP试题
  8. mongoDB中的数据类型
  9. java打印菱形代码_Java打印菱形高效简洁代码
  10. 【C++基础】自定义异常类与多重捕获