Codevs P1018 单词接龙

来源:互联网 发布:transparent软件中文版 编辑:程序博客网 时间:2024/04/27 13:22

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年
出自《食指的诗》

0 0