p1311.pas

来自「www.vijos.cn上一些习题的参考源码」· PAS 代码 · 共 71 行

PAS
71
字号
program dcjl;
const
    MAXN=50;
var
    map:array[1..MAXN,1..MAXN] of integer;
    used:array[1..MAXN] of 0..2;
    word:array[1..MAXN] of string;
    n,i,max:integer;
    t,ch:char;
    
function min(a,b:integer):integer;
begin
    if a<=b then min:=a
    else min:=b;
end;

procedure init;
var
    i,j,k:integer;
begin
    for i:=1 to n do
        for j:=1 to n do
            map[i,j]:=-1;
            
    for i:=1 to n do begin
        for j:=1 to n do begin
            for k:=1 to min(length(word[i]),length(word[j]))-1 do begin
                if copy(word[i],length(word[i])-k+1,k)=copy(word[j],1,k) then begin
                    map[i,j]:=length(word[j])-k;
                    break;
                end;
            end;
        end;
    end;
end;


procedure search(i,len:integer);
var
    j:integer;
begin
    if len>max then max:=len;
    for j:=1 to n do begin
        if (used[j]<2) and (map[i,j]<>-1) then begin
            inc(used[j]);
            search(j,len+map[i,j]);
            dec(used[j]);
        end;
    end;

end;


begin
    readln(n);
    for i:=1 to n do
        readln(word[i]);
    readln(ch);
    init;
    max:=0;
    for i:=1 to n do begin
        t:=word[i,1];
        if(t=ch) then begin
            fillchar(used,sizeof(used),0);
            used[i]:=1;
            search(i,length(word[i]));
        end;
    end;
    writeln(max);
end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?