ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1218. Episode N-th: The Jedi Tournament

If anyone who can tell me why it's WA will be very kind!
Послано mace 18 ноя 2002 18:56
Why this WA, Plz Help!
----------------------------------------------------------------------
program a1218;

const
     max=502;

type
    xlist=integer;
    list=array[1..max]of xlist;
    atype=array[1..3]of list;
    gtype=array[1..max,1..max]of integer;
    ctype=array[1..max]of integer;

var
   name:array[1..max]of string;
   a:atype;
   b:list;
   g:gtype;
   c:ctype;
   i,j,n,j1,k:integer;
   s:shortint;
   st1,st2:string;
   ti:boolean;

procedure qsort(var a : ctype;lo,hi:integer);

    procedure sort(l,r: longint);
      var
         i,j,x,y: longint;
      begin
         i:=l;
         j:=r;
         x:=a[(l+r) div 2];
         repeat
           while a[i]<x do
            inc(i);
           while x<a[j] do
            dec(j);
           if not(i>j) then
             begin
                y:=a[i];
                a[i]:=a[j];
                a[j]:=y;
                inc(i);
                j:=j-1;
             end;
         until i>j;
         if l<j then
           sort(l,j);
         if i<r then
           sort(i,r);
      end;

    begin
       sort(lo,hi);
    end;

function inarr(x:integer;var s:integer;t:integer):boolean;
         var
            i,s1,t1:integer;
         begin
              s1:=s;t1:=t;inarr:=false;
              for i:=s1 to t1 do if c[i]=x then begin
                  s:=i;
                  inarr:=true;
                  exit;
              end;
         end;

procedure printf(s,t:integer);
          var
             i:integer;
          begin
               qsort(c,s,t);
               for i:=s to t do writeln(name[c[i]]);
          end;

procedure findcyc(x,dep:integer);
          begin
               for i:=1 to b[x] do begin
                   j:=1;
                   if inarr(g[x,i],j,dep) then begin
                      printf(j,dep);
                      halt;
                   end else begin
                       inc(dep);
                       c[dep]:=g[x,i];
                       findcyc(g[x,i],dep);
                       c[dep]:=0;
                       dec(dep);
                   end;
               end;
          end;

begin

     fillchar(a,sizeof(a),0);

     readln(n);
     for i:=1 to n do begin
         readln(st1);
         st2:='';
         for j:=1 to length(st1) do
             if st1[j]<>' ' then st2:=st2+st1[j] else break;
         name[i]:=st2;
         j1:=j;k:=0;
         for j:=j1 to length(st1) do if st1[j]=' ' then inc(k) else a
[k][i]:=a[k][i]*10+ord(st1[j])-48;
     end;

     fillchar(b,sizeof(b),0);
     for i:=1 to n do
         for j:=1 to n do begin
             s:=0;
             for k:=1 to 3 do if a[k][j]>a[k][i] then s:=s+1;
             if s>=2 then begin
                inc(b[i]);
                g[i,b[i]]:=j;
             end;
         end;

     ti:=true;
     for i:=1 to n do
         if b[i]=0 then begin
            writeln(name[i]);
            ti:=false;
         end;

     if ti then begin
        c[1]:=1;
        findcyc(1,1);
     end;

end.