ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1067. Disk Tree

CE? WY
Posted by Oleg 26 Dec 2002 19:39
type
 folder = record
  n:integer;
  s:string[80];
  a:array [1..500] of ^folder;
 end;
 pfolder= ^folder;

var i,j,k,n,m:integer;
    a:^folder;
    s,s1:string;

procedure add(a:pfolder;s:string);
var i,j,k:integer;
    s1,s2:string;
    b:^folder;
begin
 if pos('\',s)>0 then
 begin
  s1:=copy(s,1,pos('\',s)-1);
  delete(s,1,pos('\',s));
 end else begin
  s1:=s;
  s:='';
 end;
 k:=0;
 for i:=1 to a^.n do
  if a^.a[i]^.s=s1 then
  begin
   add(a^.a[i],s);
   k:=1;
  end;
 if k=0 then
 begin
  inc(a^.n);
  getmem(a^.a[a^.n],sizeof(folder));
  a^.a[a^.n]^.s:=s1;
  a^.a[a^.n]^.n:=0;
  if s<>'' then add(a^.a[a^.n],s);
 end;
end;

procedure wr(a:pfolder;k:integer);
var i,j:integer;
begin
 for i:=1 to k do write(' ');
 if k>=0 then writeln(a^.s);
 for i:=1 to a^.n do wr(a^.a[i],k+1);
end;

procedure deletes(a:pfolder);
var i,j:integer;
begin
 for i:=1 to a^.n do deletes(a^.a[i]);
 freemem(a,sizeof(folder));
end;


begin
 getmem(a,sizeof(folder));
 a^.s:=' ';
 readln(n);
 a^.n:=0;
 for i:=1 to n do
 begin
  readln(s);
  if pos('\',s)>0 then
  begin
   s1:=copy(s,1,pos('\',s)-1);
   delete(s,1,pos('\',s));
  end else begin
   s1:=s;
   s:='';
  end;
  k:=0;
  for j:=1 to a^.n do
   if a^.a[j]^.s=s1 then
   begin
    if s<>'' then add(a^.a[j],s);
    k:=1;
   end;
  if k=0 then
  begin
   inc(a^.n);
   getmem(a^.a[a^.n],sizeof(folder));
   a^.a[a^.n]^.s:=s1;
   a^.a[a^.n]^.n:=0;
   if s<>'' then add(a^.a[a^.n],s);
  end;
 end;
 wr(a,-1);
 deletes(a);
new versoin.its Ce to. help
Posted by Oleg 26 Dec 2002 19:56
type
 folder = record
  n:integer;
  s:string[80];
  a:array [0..500] of ^folder;
 end;
 pfolder= ^folder;

var i,j,k,n,m:integer;
    a:^folder;
    s,s1:string;

procedure add(a:pfolder;s:string);
var i,j,k:integer;
    s1,s2:string;
    b:^folder;
begin
 if pos('\',s)>0 then
 begin
  s1:=copy(s,1,pos('\',s)-1);
  delete(s,1,pos('\',s));
 end else begin
  s1:=s;
  s:='';
 end;
 k:=0;
 for i:=1 to a^.n do
  if a^.a[i]^.s=s1 then
  begin
   add(a^.a[i],s);
   k:=1;
  end;
 if k=0 then
 begin
  inc(a^.n);
  getmem(a^.a[a^.n],sizeof(folder));
  a^.a[a^.n]^.s:=s1;
  a^.a[a^.n]^.n:=0;
  if s<>'' then add(a^.a[a^.n],s);
 end;
end;

procedure wr(a:pfolder;k:integer);
var i,j:integer;
begin
 for i:=1 to k do write(' ');
 if k>=0 then writeln(a^.s);
 for i:=1 to a^.n do wr(a^.a[i],k+1);
end;

procedure sort1(a:pfolder);
var i,j:integer;
begin
 for i:=1 to a^.n do sort1(a^.a[i]);
 for i:=1 to a^.n do
 begin
  for j:=i+1 to a^.n do
  begin
   if a^.a[i]^.s>a^.a[j]^.s then
   begin
    a^.a[0]:=a^.a[i];
    a^.a[i]:=a^.a[j];
    a^.a[j]:=a^.a[0];
   end;
  end;
 end;
end;

procedure deletes(a:pfolder);
var i,j:integer;
begin
 for i:=1 to a^.n do deletes(a^.a[i]);
 freemem(a,sizeof(folder));
end;


begin
 getmem(a,sizeof(folder));
 a^.s:=' ';
 readln(n);
 a^.n:=0;
 for i:=1 to n do
 begin
  readln(s);
  if pos('\',s)>0 then
  begin
   s1:=copy(s,1,pos('\',s)-1);
   delete(s,1,pos('\',s));
  end else begin
   s1:=s;
   s:='';
  end;
  k:=0;
  for j:=1 to a^.n do
   if a^.a[j]^.s=s1 then
   begin
    if s<>'' then add(a^.a[j],s);
    k:=1;
   end;
  if k=0 then
  begin
   inc(a^.n);
   getmem(a^.a[a^.n],sizeof(folder));
   a^.a[a^.n]^.s:=s1;
   a^.a[a^.n]^.n:=0;
   if s<>'' then add(a^.a[a^.n],s);
  end;
 end;
 sort1(a);
 wr(a,-1);
 deletes(a);
end.
It's MLE (+)
Posted by Dmitry 'Diman_YES' Kovalioff 27 Dec 2002 12:58
{$APPTYPE CONSOLE}
type
 pfolder= ^folder;
 folder = record
  n:integer;
  s:string[80];
  a:array [0..500] of pfolder;
 end;


var i,j,k,n,m:integer;
    a:pfolder;
    s,s1:string;

procedure add(a:pfolder;s:string);
var i,j,k:integer;
    s1,s2:string;
    b:^folder;
begin
 if pos('\',s)>0 then
 begin
  s1:=copy(s,1,pos('\',s)-1);
  delete(s,1,pos('\',s));
 end else begin
  s1:=s;
  s:='';
 end;
 k:=0;
 for i:=1 to a^.n do
  if a^.a[i]^.s=s1 then
  begin
   add(a^.a[i],s);
   k:=1;
  end;
 if k=0 then
 begin
  inc(a^.n);
  getmem(a^.a[a^.n],sizeof(folder));
  a^.a[a^.n]^.s:=s1;
  a^.a[a^.n]^.n:=0;
  if s<>'' then add(a^.a[a^.n],s);
 end;
end;

procedure wr(a:pfolder;k:integer);
var i,j:integer;
begin
 for i:=1 to k do write(' ');
 if k>=0 then writeln(a^.s);
 for i:=1 to a^.n do wr(a^.a[i],k+1);
end;

procedure sort1(a:pfolder);
var i,j:integer;
begin
 for i:=1 to a^.n do sort1(a^.a[i]);
 for i:=1 to a^.n do
 begin
  for j:=i+1 to a^.n do
  begin
   if a^.a[i]^.s>a^.a[j]^.s then
   begin
    a^.a[0]:=a^.a[i];
    a^.a[i]:=a^.a[j];
    a^.a[j]:=a^.a[0];
   end;
  end;
 end;
end;

procedure deletes(a:pfolder);
var i,j:integer;
begin
 for i:=1 to a^.n do deletes(a^.a[i]);
 freemem(a,sizeof(folder));
end;


begin
 getmem(a,sizeof(folder));
 a^.s:=' ';
 readln(n);
 a^.n:=0;
 for i:=1 to n do
 begin
  readln(s);
  if pos('\',s)>0 then
  begin
   s1:=copy(s,1,pos('\',s)-1);
   delete(s,1,pos('\',s));
  end else begin
   s1:=s;
   s:='';
  end;
  k:=0;
  for j:=1 to a^.n do
   if a^.a[j]^.s=s1 then
   begin
    if s<>'' then add(a^.a[j],s);
    k:=1;
   end;
  if k=0 then
  begin
   inc(a^.n);
   getmem(a^.a[a^.n],sizeof(folder));
   a^.a[a^.n]^.s:=s1;
   a^.a[a^.n]^.n:=0;
   if s<>'' then add(a^.a[a^.n],s);
  end;
 end;
 sort1(a);
 wr(a,-1);
 deletes(a);
end.
IMHO, this problem is rather simple, so I've solved it after 40 mins (-)
Posted by Dmitry 'Diman_YES' Kovalioff 27 Dec 2002 21:51
what does IMHO meen
Posted by Oleg 28 Dec 2002 07:15
Re: what does IMHO meen
Posted by Cosine 3 Aug 2003 09:14
> It means "in my humble opinion"