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 1124. Mosaic

why I got TL!!!!!!!!!!!!
Posted by ACer 15 Aug 2003 08:32
var  l,m,n,i,j,t,total,s:longint;
     closed,open,now:longint;

     a:array[0..500,0..500] of integer;
     b:array[1..500]of boolean;

function done(d,p:longint):boolean;
var k:longint;
begin
     done:=false;
     for k:=1 to a[d,0] do
         if a[d,k]=p then exit;
     done:=true;
end;
begin
     read(m);
     read(n);
     for i:=1 to m do
         for j:=1 to n do begin
         read(t);
         if t<>i then begin
            if done(i,t) then
            begin
               inc(a[i,0]);
               a[i,a[i,0]]:=t;
               b[i]:=true;
               end;
            inc(s);
            end;
         end;
     for i:=1 to m do
         if b[i] then begin
            closed:=a[i,0];
            open:=0;
            while open<closed do begin
            now:=0;
                  for j:=open+1 to closed do
                      for l:=1 to a[a[i,j],0] do
                      if done(i,a[a[i,j],l]) then begin
                      a[i,closed+now+1]:=a[a[i,j],l] ;
                      inc(now);
                      end;
                  open:=closed;
                  closed:=closed+now;
                  a[i,0]:=closed;
                  end;

            inc(total);
            for j:=1 to a[i,0] do b[a[i,j]]:=false;
            end;
     if total=0 then writeln(0)
                else writeln(s+total-1);
     end.
Re: why I got TL!!!!!!!!!!!!
Posted by ACer 15 Aug 2003 09:16
> var  l,m,n,i,j,t,total,s:longint;
>      closed,open,now:longint;
>
>      a:array[0..500,0..500] of integer;
>      b:array[1..500]of boolean;
>
> function done(d,p:longint):boolean;
> var k:longint;
> begin
>      done:=false;
>      for k:=1 to a[d,0] do
>          if a[d,k]=p then exit;
>      done:=true;
> end;
> begin
>      read(m);
>      read(n);
>      for i:=1 to m do
>          for j:=1 to n do begin
>          read(t);
>          if t<>i then begin
>             if done(i,t) then
>             begin
>                inc(a[i,0]);
>                a[i,a[i,0]]:=t;
>                b[i]:=true;
>                end;
>             inc(s);
>             end;
>          end;
>      for i:=1 to m do
>          if b[i] then begin
>             closed:=a[i,0];
>             open:=0;
>             while open<closed do begin
>             now:=0;
>                   for j:=open+1 to closed do
>                       for l:=1 to a[a[i,j],0] do
>                       if done(i,a[a[i,j],l]) then begin
>                       a[i,closed+now+1]:=a[a[i,j],l] ;
>                       inc(now);
>                       end;
>                   open:=closed;
>                   closed:=closed+now;
>                   a[i,0]:=closed;
>                   end;
>
>             inc(total);
>             for j:=1 to a[i,0] do b[a[i,j]]:=false;
>             end;
>      if total=0 then writeln(0)
>                 else writeln(s+total-1);
>      end.
Re: who can help me please
Posted by ACer 15 Aug 2003 09:17
> > var  l,m,n,i,j,t,total,s:longint;
> >      closed,open,now:longint;
> >
> >      a:array[0..500,0..500] of integer;
> >      b:array[1..500]of boolean;
> >
> > function done(d,p:longint):boolean;
> > var k:longint;
> > begin
> >      done:=false;
> >      for k:=1 to a[d,0] do
> >          if a[d,k]=p then exit;
> >      done:=true;
> > end;
> > begin
> >      read(m);
> >      read(n);
> >      for i:=1 to m do
> >          for j:=1 to n do begin
> >          read(t);
> >          if t<>i then begin
> >             if done(i,t) then
> >             begin
> >                inc(a[i,0]);
> >                a[i,a[i,0]]:=t;
> >                b[i]:=true;
> >                end;
> >             inc(s);
> >             end;
> >          end;
> >      for i:=1 to m do
> >          if b[i] then begin
> >             closed:=a[i,0];
> >             open:=0;
> >             while open<closed do begin
> >             now:=0;
> >                   for j:=open+1 to closed do
> >                       for l:=1 to a[a[i,j],0] do
> >                       if done(i,a[a[i,j],l]) then begin
> >                       a[i,closed+now+1]:=a[a[i,j],l] ;
> >                       inc(now);
> >                       end;
> >                   open:=closed;
> >                   closed:=closed+now;
> >                   a[i,0]:=closed;
> >                   end;
> >
> >             inc(total);
> >             for j:=1 to a[i,0] do b[a[i,j]]:=false;
> >             end;
> >      if total=0 then writeln(0)
> >                 else writeln(s+total-1);
> >      end.