2016年提高组模拟题(20161114) 文件列表 ssl 2572 模拟

这里写图片描述
这里写图片描述

分析

模拟一棵树就可以了
但是比赛是好像写了半天
这恶心的变量名

代码

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值