搜索单词接龙 luogu-1019
Posted dawn-star
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索单词接龙 luogu-1019相关的知识,希望对你有一定的参考价值。
题目描述
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和 atide 间不能相连。
AC代码
var
st:array[1..20]of string;
n,ans,i:longint;
vis:array[1..20]of longint;
function max(n,m:longint):longint;
begin
if n>m then exit(n) else exit(m);
end;
function min(n,m:longint):longint;
begin
if n<m then exit(n) else exit(m);
end;
function cover(st1,st2:string):longint;
var
i,j:longint;
fg:boolean;
begin
for i:=1 to min(length(st1),length(st2))-1 do
begin
fg:=true;
for j:=1 to i do
if st1[length(st1)-i+j]<>st2[j] then fg:=false;
if fg then exit(i);
end;
exit(0);
end;
procedure dfs(s:string;len:longint);
var
i,covernum:longint;
begin
ans:=max(ans,len);
for i:=1 to n do
begin
if vis[i]>=2 then continue;
covernum:=cover(s,st[i]);
if covernum>0 then
begin
inc(vis[i]);
dfs(st[i],len+length(st[i])-covernum);
dec(vis[i]);
end;
end;
end;
begin
fillchar(vis,sizeof(vis),0);
readln(n);
for i:=1 to n+1 do readln(st[i]);
ans:=0;
dfs(' '+st[n+1],1);
writeln(ans);
end.
以上是关于搜索单词接龙 luogu-1019的主要内容,如果未能解决你的问题,请参考以下文章