Codevs 1018 单词接龙
题目描述 Description
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。
输入输出
输入描述 Input Description
输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.
输出描述 Output Description
只需输出以此字母开头的最长的“龙”的长度
样例 Sample
样例输入 Sample Input
5
at
touch
cheat
choose
tact
a
样例输出 Sample Output
23
数据范围及提示 Data Size & Hint
(连成的“龙”为atoucheatactactouchoose)
分析
(⊙o⊙)嗯,该题纯粹的DFS,只要打好标记数组和字符串处理即可完成。至于题目所说的包含关系则完全没有任何用处,因为当一个词被包含时,要么长度不变,要么长度变长,而在深搜过程中不断取最大,所以说就没有必要特意判断是否包含。
代码如下
program p1018;
var vocabulary:array[1..1000] of string;
used:array[1..1000] of 0..2;
i,n,maxn:longint;
start:char;
now:string;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
procedure dfs;
var i,j,k,l:longint;
str2,str3:string;
begin
for i:=1 to n do
begin
if used[i]<2
then
begin
str2:='';
str3:='';
j:=length(now)+1;
k:=0;
l:=j-1;
while ((str2<>str3) or ((str2='') and (str3=''))) and (j>1) and (k<length(vocabulary[i])) do
begin
j:=j-1;
k:=k+1;
str2:=now[j]+str2;
str3:=str3+vocabulary[i,k];
end;
if str2=str3
then
begin
used[i]:=used[i]+1;
now:=copy(now,1,j-1)+vocabulary[i];
dfs;
used[i]:=used[i]-1;
maxn:=max(maxn,length(now));
now:=copy(now,1,l);
end;
end;
end;
end;
begin
readln(n);
for i:=1 to n do
readln(vocabulary[i]);
readln(start);
for i:=1 to n do
if vocabulary[i,1]=start
then
begin
maxn:=max(maxn,length(vocabulary[i]));
used[i]:=used[i]+1;
now:=vocabulary[i];
dfs;
used[i]:=used[i]-1;
end;
write(maxn);
end.
评测结果
测试通过 Accepted
100%
总耗时: 1 ms
0 / 0 数据通过测试.
运行结果
测试点#41.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#42.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#43.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#44.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#45.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#46.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
HOLD ON
加油,不要放弃未来的希望
相信未来
作者 食指
当蜘蛛网无情地查封了我的炉台,
当灰烬的余烟叹息着贫困的悲哀,
我依然固执地铺平失望的灰烬,
用美丽的雪花写下:相信未来。
当我的紫葡萄化为深秋的露水,
当我的鲜花依偎在别人的情怀,
我依然固执地用凝霜的枯藤,
在凄凉的大地上写下:相信未来。
我要用手指那涌向天边的排浪,
我要用手撑那托起太阳的大海,
摇曳着曙光那支温暖漂亮的笔杆,
用孩子的笔体写下:相信未来。
我之所以坚定地相信未来,
是我相信未来人们的眼睛——
她有拨开历史风尘的睫毛,
她有看透岁月篇章的瞳孔。
不管人们对于我们腐烂的皮肉,
那些迷途的惆怅,失败的苦痛,
是寄予感动的热泪,深切的同情,
还是给以轻蔑的微笑,辛辣的嘲讽。
我坚信人们对于我们的脊骨,
那无数次地探索、迷途、失败和成功,
一定会给予热情、客观、公正的评定,
是的,我焦急地等待着他们的评定。
朋友,坚定地相信未来吧,
相信不屈不挠的努力,
相信战胜死亡的年轻,
相信未来,热爱生命。
1968年
出自《食指的诗》