P1127
题目描述
如果单词X的末字母与单词Y的首字母相同,则X与Y可以相连成X.Y。(注意:X、Y之间是英文的句号“.”)。例如,单词dog与单词gopher,则dog与gopher可以相连成dog.gopher。
另外还有一些例子:
dog.gopher
gopher.rat
rat.tiger
aloha.aloha
arachnid.dog
连接成的词可以与其他单词相连,组成更长的词链,例如:
aloha.arachnid.dog.gopher.rat.tiger
注意到,“.”两边的字母一定是相同的。
现在给你一些单词,请你找到字典序最小的词链,使得这些单词在词链中出现且仅出现一次。
输入输出格式
输入格式:
第一行是一个正整数n(1 ≤ n ≤ 1000),代表单词数量。
接下来共有n行,每行是一个由1到20个小写字母组成的单词
输出格式:
只有一行,表示组成字典序最小的词链,若不存在则只输出三个星号“***”。
输入输出样例
6
aloha
arachnid
dog
gopher
rat
tiger
aloha.arachnid.dog.gopher.rat.tiger
说明
对于40%的数据,有n≤10;
对于100%的数据,有n≤1000。
字符串排序+搜索
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=1000+10;
int n,cnt[30],len[maxn],ans[maxn],sum;
bool ok,vis[maxn];
string s[maxn]; int fir[maxn],to[maxn*maxn],nxt[maxn*maxn],e=0;
void add(int x,int y) {
to[++e]=y;nxt[e]=fir[x];fir[x]=e;
} void dfs(int pos) {
if(ok) return;
vis[pos]=1;ans[++sum]=pos;
if(sum==n) {
ok=1;return;
}
int x;
for(int y=fir[pos];y;y=nxt[y]) {
x=to[y];
if(vis[x]) continue;
dfs(x);
}
if(!ok) sum--,vis[pos]=0;
} int main() {
scanf("%d",&n);
for(int i=1;i<=n;++i) cin>>s[i];
sort(s+1,s+n+1);
for(int i=1;i<=n;++i) {
len[i]=s[i].size();
cnt[s[i][0]-'a']++;
cnt[s[i][len[i]-1]-'a']--;
}
int tot=0,pp;
for(int i=0;i<26;++i) {
if(cnt[i]==1) tot++,pp=i;
if(cnt[i]==2) tot=2;
}
if(tot>=2) {
printf("***");
return 0;
}
for(int i=1;i<=n;++i) for(int j=n;j>=1;--j)
if(i!=j&&s[i][len[i]-1]==s[j][0]) add(i,j);
if(tot==1) {
for(int i=1;i<=n;++i) if(s[i][0]-'a'==pp) dfs(i);
}
else for(int i=1;i<=n;++i) dfs(i);
if(!ok) printf("***");
else {
cout<<s[ans[1]];
for(int i=2;i<=n;++i) cout<<"."<<s[ans[i]];
}
return 0;
}
P1127的更多相关文章
- P1127 词链
P1127 词链 题目描述 如果单词X的末字母与单词Y的首字母相同,则X与Y可以相连成X.Y.(注意:X.Y之间是英文的句号“.”).例如,单词dog与单词gopher,则dog与gopher可以相连 ...
- Vijos P1127 级数求和【模拟】
级数求和 描述 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. 现给出一个整数K(1<=k<=15),要求计算出一个最小的n:使得Sn ...
- entity framework core 支持批量插入,值得期待
entity framework6.x之前搞了这么多版本,构架这么牛B,居然没有批量插入更新的功能,但有很多替换的解决方案,例如Entity Framework Extended Library(ht ...
- 洛谷P1127-词链
Problem 洛谷P1127-词链 Accept: 256 Submit: 1.3kTime Limit: 1000 mSec Memory Limit : 128MB Problem ...
- vijos题解
Vijos题解 题库地址:https://vijos.org/p P1001 谁拿了最多奖学金 题意:按照指定要求计算奖学金,直接用if判断即可 #include<iostream> us ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
随机推荐
- Swoole协程报错 Uncaught Error: Call to undefined function go()
解决方法, 在PHP.ini中开启短名
- [转]Visual Studio 2010单元测试(1)--运行和定义普通单元测试
Visual Studio 2010 运行和定义单元测试 在VS2010中,单元测试的功能很强大,使得建立单元测试和编写单元测试代码,以及管理和运行单元测试都变得简单起来,通过私有访问器可以对私有方法 ...
- Mysql--数据表碎片优化方法
碎片产生原因: 大量批量插入和删除操作数据库,基于线性表的顺序存储结构的特点,出现了大量的空间碎片.一.优化步骤: 1.查看整库的情况 2.方便优化 3.整库所有表, 包含行数 索引长度 碎片空间 二 ...
- http和tcp/ip,socket的区别
http协议和tcp/ip协议乍看起来,感觉是同一类的东西,其实不然,下面简单的说说他们的区别. http协议是应用层的一种数据封装协议,类似的还有ftp,telnet等等,而tcp/ip是数据传输层 ...
- fileinput使用心得
下咋以及一些具体使用过程就不叙述了,简单说一下使用时候需要注意的几点 1.在js中封装好的fileinput函数 /* * 初始化fileInput控件(第一次初始化) * type 不同类别 * i ...
- leetcode 847. Shortest Path Visiting All Nodes 无向连通图遍历最短路径
设计最短路径 用bfs 天然带最短路径 每一个状态是 当前的阶段 和已经访问过的节点 下面是正确但是超时的代码 class Solution: def shortestPathLength(self, ...
- css 始终显示滚动条,内容超出显示有滑块的滚动条,内容没有超出显示空的滚动条
1.内容没有超出显示空的滚动条 <div class="div1"> 前端开发者前端开发者前端开发者前端开发者前端开发者 </div> css代码: .di ...
- pycharm2018激活
pyCharm最新2018最新激活码 选择 Activate new license with License server (用license server 激活) 在 License sever ...
- Python_异常处理try...except、raise
一.try...except 有时候我们写程序的时候,会出现一些错误或异常,导致程序终止.例如,做除法时,除数为0,会引起一个ZeroDivisionError 例子: 1 2 3 4 a=10 b= ...
- 9.2专项测试-Android性能测试黑盒分析-1
1. 专项测试 业务测试:面向新需求 回归测试:面向已交付需求 专项测试:面向非功能需求的各类质量唯独特征 表现 用户维度 技术维度 崩溃 crash,弱网 检测崩溃1.某个页面,因为研发处理不合适, ...