NOIP2000提高组复赛C 单词接龙

题目链接: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

右键Git Bash Here不见了怎么办,手把手教你还原!

第一步&#xff0c;window R&#xff0c;输入regedit回车进入注册表 依次进入HKEY_CLASSES_ROOT —-》 Directory —-》Background —-》 shell 右键点击shell&#xff0c;选择新建&#xff0c;然后选择项&#xff0c;命名为 Git Bash Here&#xff0c;成功后进入桌面右键发现…

RUNOOB python练习题6 斐波那契数列

用来练手的python 练习题其六&#xff0c;原链接 : python练习实例6 题干 : 斐波那契数列 斐波那契数列可以说是很好的递归理解工具了&#xff0c;这里就用递归实现一下斐波那契数列。 源代码如下: # 返回fibonacci数列中某一项的数值 def Fibonacci(n):if n 1:return 1eli…

github windows客户端

方法/步骤 1 1. 首先到官网下载Github客户端 2 2. 点击上图红框的按钮开始下载客户端。 3 3. 双击下载好的客户端&#xff0c;开始安装。 4 双击之后出现一个框 5 之后等待一段时间&#xff0c;出现一个在线下载界面 6 4. 在线下载完成之后开始进行安装。安装完成之后…

赋值语句 变量的地址相关 : RUNOOB python练习题7

用来练手的python 练习题&#xff0c;原链接 : python练习实例7 练习实例7非常的简单也有意思。题干 : 将一个列表的数据复制到另一个列表中。 完成这个操作的代码非常简单&#xff0c;即使是我这样的初学者应该也是一语道破&#xff0c;赋值语句嘛。但这里我们就列举出几种不…

Web标准的概念及组成

一周更新两个或三个关于web前端的知识点&#xff0c;欢迎感兴趣的小伙伴们一起学习讨论1、WEB标准是网页制作的标准&#xff0c;它不是一个标准&#xff0c;它是根据网页的不同组成部分生成的一系列标准。这些标准大部分由W3C起草发布&#xff0c;也有部分标准由ECMA起草发布。…

Fiddler简介及安装和HTTPS的解决

Fiddler简介&#xff1a; 一个很强大的抓包工具&#xff0c;类似Charles 1.安装&#xff1a; Filddler官网&#xff1a;点击打开链接 我安装的是filddler4&#xff1a;点击打开链接 直接下载文件&#xff0c;然后一路下一步就可以了 1.下载文件&#xff1a; 2.安装文件一…

RUNOOB python练习题8 numpy矩阵的索引及遍历

用来练手的python 练习题&#xff0c;原链接 : python练习实例8 题干: 输出 9*9 乘法口诀表。 import numpy as nptable np.zeros((9,9)) for i in range(table.shape[0]):for j in range(table.shape[1]):table[i][j] (i1) * (j1)# 查询九九乘法表 def affichage_table(a,…

ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字

做接口测试&#xff0c;使用unittestddtexcel ,使用HtmlTetstRunner来生成测试用例。 查看报告的时候 用例名称都是 test_api_1 、test_api_2 、test_api_3 的显示 &#xff0c;看的不爽&#xff0c;也不明确&#xff0c;如果是test_api_登陆成功 、 test_api_密码错误 …

Fiddler抓取https设置及其原理

Fiddler抓取https设置及其原理 2018-02-02 目录 1 HTTPS握手过程 2 Fiddler抓取HTTPS过程 3 Fiddler抓取HTTPS设置参考 数字签名是什么&#xff1f; 1 HTTPS握手过程 HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL &#xff08;安全套接字层&#xff09;和…

RUNOOB python练习题10

用来练手的python 练习题&#xff0c;原链接 : python练习实例9 题干 : 暂停两秒输出&#xff0c;并格式化当前时间。 import time,datetimeTIME datetime.datetime.now() print(TIME.strftime("%Y.%m.%d %H-%M-%S")) time.sleep(2) TIME datetime.datetime.now(…

HTTPS连接过程以及中间人攻击劫持

HTTPS连接过程以及中间人攻击劫持 目前很多应用都用webview加载H5页面&#xff0c;如果服务端采用的是可信CA颁发的证书&#xff0c;在 webView.setWebViewClient(webviewClient) 时重载 WebViewClient的onReceivedSslError() &#xff0c;如果出现证书错误&#xff0c;直接调…

RUNOOB python练习题12 找素数问题

用来练手的python 练习题&#xff0c;原链接 : python练习实例12 题干 : 判断101-200之间有多少个素数&#xff0c;并输出所有素数 源代码如下: import numpy as np bound np.arange(101,201,1) result np.array([]) for k in bound:for i in range(k):# 如果k存在不是1或…

Linux: centOS6.5 RabbitMQ

在大多数大公司&#xff0c;像应用服务器软件的安装、部署都是运维的事情&#xff0c;其实自己去尝试部署一下&#xff0c;也是有收获的。 有机会正好尝试了Linux下的rabbitMq安装过程&#xff0c;做了记录&#xff0c;希望有用到的人可以做下参考。 安装环境&#xff1a; Li…

RUNOOB python练习题13 水仙花数

用来练手的python 练习题其十三&#xff0c;原链接 : python练习实例13 题干 : 打印出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff1a;153是一个"水仙花数"&#xff0c;…

OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用

OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. OsharpNS.Swagger使用实例(登录和授权) 1.4. Angular6的前端项目启动Osharp代码生成器的使用 2.1 生成器的使用 2.2 生…

RUNOOB python练习题 14

用来练手的python 练习题其十四&#xff0c;原链接 : python练习实例14 题干 : 将一个正整数分解质因数。例如&#xff1a;输入90,打印出90233*5。 拿到题目&#xff0c;我们就可以看出&#xff0c;首先我们需要一个函数来判断某一正整数是否为质数&#xff0c;然后还需要一个…

RUNOOB python练习题17

用来练手的python 练习题其十三&#xff0c;原链接 : python练习实例17 题干 : 输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其它字符的个数 这个例题让我回忆起了远古的记忆&#xff0c;python str类的 isalpha,isspace,isdigit方法。这些方法通过比较ASC…

Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台

Centos7下使用ELK&#xff08;Elasticsearch Logstash Kibana&#xff09;搭建日志集中分析平台 日志监控和分析在保障业务稳定运行时&#xff0c;起到了很重要的作用&#xff0c;不过一般情况下日志都分散在各个生产服务器&#xff0c;且开发人员无法登陆生产服务器&#xf…

叠数的加法与字符串 RUNOOB python练习题 18

用来练手的python 练习题其十八&#xff0c;原链接 : python练习实例18 题干: 求saaaaaaaaaaaa…a的值&#xff0c;其中a是一个数字。例如222222222222222(此时共有5个数相加)&#xff0c;几个数相加由键盘控制 这种类型的叠数相加&#xff0c;让我不禁联想到了python中&…

RUNOOB python练习题19 找出1000以内的所有完数

用来练手的python 练习题&#xff0c;原链接 : python练习实例19 题干: 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如61&#xff0b;2&#xff0b;3.编程找出1000以内的所有完数。 首先我们要理解&#xff0c;什么是完数。根据百度词条&am…