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

Обсуждение задачи 1008. Кодирование изображений

hailoc12 I can pass test 1 [4] // Задача 1008. Кодирование изображений 28 сен 2006 15:31
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}
Const Maxn= 20;
      dx  : Array[1..4] Of Integer =( 1,0,-1, 0);
      dy  : Array[1..4] Of Integer =( 0,1, 0,-1);
      Nb  : Array[1..4] Of Char    =('R','T','L','B');

Var Matrix: Array[0..Maxn+1, 0..Maxn+1] Of Boolean;
    n: Integer;
    i, j, t: Integer;
    minx, miny: Integer;
Procedure Print2;
  Var Queuex, Queuey: Array[1..Maxn*Maxn] Of Integer;
      Front, Rear: Integer;
      x, y, count, i: Integer;
      ch: Char;
      st: String;
  Begin
      FillChar(Matrix, SizeOf(Matrix), False);
      Queuex[1]:= minx; Queuey[1]:= miny; Front:= 1; Rear:= 1;
      Matrix[minx, miny]:= True;
      count:= 1;
      While Rear<= Front Do
        Begin
          x:= Queuex[Rear]; y:= Queuey[Rear]; Inc(Rear);
          Readln(st);
          i:= 1;
          While st[i]<>',' Do
            Begin
              Case upcase(st[i]) Of
                'R':Begin Inc(Front); Queuex[Front]:= x+ dx[1];
                          Queuey[Front]:= y+ dy[1];
                          Matrix[x+dx[1], y+dy[1]]:= True;
                          inc(Count);
                    End;
                'T':Begin Inc(Front); Queuex[Front]:= x+ dx[2];
                          Queuey[Front]:= y+ dy[2];
                          Matrix[x+dx[2], y+dy[2]]:= True;
                          inc(Count);
                    End;
                'L':Begin Inc(Front); Queuex[Front]:= x+ dx[3];
                          Queuey[Front]:= y+ dy[3];
                          Matrix[x+dx[3], y+dy[3]]:= True;
                          inc(Count);
                    End;
                'B':Begin Inc(Front); Queuex[Front]:= x+ dx[4];
                          Queuey[Front]:= y+ dy[4];
                          Matrix[x+dx[4], y+dy[4]]:= True;
                          inc(Count);
                    End;
                '.': Break;
              End;
              inc(i);
            End;
        End;
      Writeln(Count);
      For x:= 1 To Maxn Do
        For y:= 1 To Maxn Do
          If Matrix[x, y] Then Writeln(x,' ', y);
  End;
Procedure Print1;
  Var Queuex, Queuey: Array[1..Maxn*Maxn] Of Integer;
      x, y, k: Integer;
      Front, Rear: Integer;
      first: Boolean;
  Begin
      Writeln(minx, ' ', miny);
      Queuex[1]:= minx; Queuey[1]:= miny;
      Front:= 1; Rear:= 1;
      Matrix[minx, miny]:= False;
      First:= True;
      While Rear<= Front Do
       Begin
        If Not First Then Writeln(',')
        Else First:= False;
        x:= Queuex[Rear]; y:= Queuey[Rear]; Inc(Rear);
        For k:=1 To 4 Do
          If Matrix[x+dx[k], y+dy[k]] Then
            Begin
              Write(Nb[k]);
              Matrix[x+dx[k], y+dy[k]]:= False;
              Inc(Front); Queuex[Front]:= x+dx[k]; Queuey[Front]:= y+ dy[k]
            End;

       End;
      Writeln('.');
  End;
Var st: string;
Begin
  st:='';
  Read(n);
  If Eoln Then
    Begin
       FillChar(Matrix, SizeOf(Matrix), False);
       minx:= Maxint; miny:= minx;
       For i:=1 To n Do
         Begin
           Readln(j, t);
           If (j= Minx) And (t< Miny) Then Miny:= t;
           If (j< Minx) ANd (t= Miny) Then Minx:= j;
           If (j< Minx) And (t< Miny) Then Begin minx:= j; miny:= t; End;
           Matrix[j, t]:= True;
         End;
       Print1;
    End
  Else
    Begin
      minx:= n;
      Readln(miny);
      Print2;
    End;
End.

I tried with many test, It all returned the true answer but not to be accepted.
AlexF Re: I can pass test 1 [3] // Задача 1008. Кодирование изображений 28 сен 2006 15:41
Delete this
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}
And you'll get AC!
hailoc12 Thank you alots [2] // Задача 1008. Кодирование изображений 28 сен 2006 19:46
I have got AC.
I have repaired it for all today'afternoon but found nothing.
Can you explain to me why my program got wrong with some directive compilers, It should be warned in FAQ.
In my timus programs I've never used any directive compilers, except {$M 16777216}, so in this question I can't help you! ))
Because of you use
{$M 16384,0,655360} directive
which have the next syntax:
{$M minstacksize,maxstacksize}
or
{$M reservedbytes} for Linux