分析
模拟一棵树就可以了
但是比赛是好像写了半天
这恶心的变量名
代码
type
arr=record
num:longint;
fill:string;
number:array[0..100] of longint;
father:longint;
end;
var
tree:array[0..100] of arr;
i,j,k:longint;
n,m:longint;
s,s1,ss:string;
procedure seach(s:string;nn:longint);
var
i,j,k:longint;
s1:string;
begin
if s='' then exit;
j:=pos('/',s);
s1:=copy(s,1,j-1);
delete(s,1,j);
for k:=1 to tree[nn].num do
if tree[tree[nn].number[k]].fill=s1
then break;
if tree[tree[nn].number[k]].fill=s1
then begin
seach(s,tree[nn].number[k]);
end
else begin
m:=m+1;
tree[m].fill:=s1;
tree[m].father:=nn;
inc(tree[nn].num);
tree[nn].number[tree[nn].num]:=m;
seach(s,m);
end;
end;
procedure qsort(l,r,nn:longint);
var
i,j,k:longint;
temp:longint;
mid:string;
begin
if (l>=r) then exit;
i:=l; j:=r;
mid:=tree[tree[nn].number[(l+r) div 2]].fill;
repeat
while tree[tree[nn].number[i]].fill<mid do i:=i+1;
while tree[tree[nn].number[j]].fill>mid do j:=j-1;
if i<=j then
begin
temp:=tree[nn].number[i];
tree[nn].number[i]:=tree[nn].number[j];
tree[nn].number[j]:=temp;
i:=i+1;
j:=j-1;
end;
until i>j;
qsort(l,j,nn);
qsort(i,r,nn);
end;
procedure outline(x,dep:longint;ss:string);
var
i,j,k:longint;
begin
if dep=1
then writeln(tree[x].fill)
else writeln(ss,'----',tree[x].fill);
for i:=1 to tree[x].num do
begin
if dep=1
then outline(tree[x].number[i],dep+1,ss)
else outline(tree[x].number[i],dep+1,ss+' |');
end;
end;
begin
readln(n);
m:=0;
for i:=1 to n do
begin
readln(s);
s:=s+'/';
j:=pos('/',s);
s1:=copy(s,1,j-1);
delete(s,1,j);
for k:=1 to m-1 do
if tree[k].fill=s1
then break;
if tree[k].fill=s1
then begin
seach(s,k);
end
else begin
m:=m+1;
tree[m].fill:=s1;
seach(s,m);
end;
end;
for i:=1 to m do
qsort(1,tree[i].num,i);
ss:='|';
outline(1,1,ss);
close(input);
close(output);
end.