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

Обсуждение задачи 1183. Brackets Sequence

What's wrong with my answer. Help, pls.
Послано meoden 13 июн 2002 21:25
Can you give me a test.
I can't find a test that my pro. run incorectly.
Thanks a lot.
Here's my pro.:

const maxn=101;
var a,d:array[1..maxn,1..maxn] of byte;
    doi:array['('..']'] of char;
    st:string;
    n:integer;

procedure in_data;
begin
   readln(st);
   n:=length(st);
   doi['(']:=')'; doi[')']:='(';
   doi['[']:=']'; doi[']']:='[';
end;

procedure solve;
var i,j,k:integer;
begin
   fillchar(a,sizeof(a),0);
   for i:=1 to n do a[i,i]:=1;

   for i:=1 to n-1 do
   for j:=i+1 to n do
   begin
      a[i,j]:=255;
      if (st[i]=doi[st[j]]) and (st[i] in ['(','[']) then
      if a[i+1,j-1]<a[i,j] then
      begin
         a[i,j]:=a[i+1,j-1];
         d[i,j]:=0;
      end;

      for k:=i to j-1 do
      if a[i,k]+a[k+1,j]<a[i,j] then
      begin
         a[i,j]:=a[i,k]+a[k+1,j];
         d[i,j]:=k;
      end;
   end;
end;

procedure out(i,j:integer);
begin
   if i>j then exit;
   if i=j then
   begin
      if st[i] in ['(','['] then write(st[i],doi[st[i]])
      else write(doi[st[i]],st[i]);
   end
   else if d[i,j]=0 then
   begin
      write(st[i]);
      if i+1<=j-1 then out(i+1,j-1);
      write(st[j]);
   end
   else
   begin
      out(i,d[i,j]);
      out(d[i,j]+1,j);
   end;
end;

begin
   in_data;
   solve;
   out(1,n);
   writeln;
end.
Help me, please
Послано meoden 14 июн 2002 06:57
You can find test for this problem at http://neerc.ifmo.ru
Послано Andrey Popyk (popyk@ief.tup.km.ua) 14 июн 2002 13:52
Con meo hu qua
Послано raxtinhac 14 июн 2002 17:28
> Can you give me a test.
> I can't find a test that my pro. run incorectly.
> Thanks a lot.
> Here's my pro.:
>
> const maxn=101;
> var a,d:array[1..maxn,1..maxn] of byte;
>     doi:array['('..']'] of char;
>     st:string;
>     n:integer;
>
> procedure in_data;
> begin
>    readln(st);
>    n:=length(st);
>    doi['(']:=')'; doi[')']:='(';
>    doi['[']:=']'; doi[']']:='[';
> end;
>
> procedure solve;
> var i,j,k:integer;
> begin
>    fillchar(a,sizeof(a),0);
>    for i:=1 to n do a[i,i]:=1;
>
>    for i:=1 to n-1 do
>    for j:=i+1 to n do
>    begin
>       a[i,j]:=255;
>       if (st[i]=doi[st[j]]) and (st[i] in ['(','[']) then
>       if a[i+1,j-1]<a[i,j] then
>       begin
>          a[i,j]:=a[i+1,j-1];
>          d[i,j]:=0;
>       end;
>
>       for k:=i to j-1 do
>       if a[i,k]+a[k+1,j]<a[i,j] then

{ you haven't defined  the value a[k+1,j] !!! }

>       begin
>          a[i,j]:=a[i,k]+a[k+1,j];
>          d[i,j]:=k;
>       end;
>    end;
> end;
>
> procedure out(i,j:integer);
> begin
>    if i>j then exit;
>    if i=j then
>    begin
>       if st[i] in ['(','['] then write(st[i],doi[st[i]])
>       else write(doi[st[i]],st[i]);
>    end
>    else if d[i,j]=0 then
>    begin
>       write(st[i]);
>       if i+1<=j-1 then out(i+1,j-1);
>       write(st[j]);
>    end
>    else
>    begin
>       out(i,d[i,j]);
>       out(d[i,j]+1,j);
>    end;
> end;
>
> begin
>    in_data;
>    solve;
>    out(1,n);
>    writeln;
> end.
Thanks, raxtinhac!
Послано meoden 14 июн 2002 20:44
> > Can you give me a test.
> > I can't find a test that my pro. run incorectly.
> > Thanks a lot.
> > Here's my pro.:
> >
> > const maxn=101;
> > var a,d:array[1..maxn,1..maxn] of byte;
> >     doi:array['('..']'] of char;
> >     st:string;
> >     n:integer;
> >
> > procedure in_data;
> > begin
> >    readln(st);
> >    n:=length(st);
> >    doi['(']:=')'; doi[')']:='(';
> >    doi['[']:=']'; doi[']']:='[';
> > end;
> >
> > procedure solve;
> > var i,j,k:integer;
> > begin
> >    fillchar(a,sizeof(a),0);
> >    for i:=1 to n do a[i,i]:=1;
> >
> >    for i:=1 to n-1 do
> >    for j:=i+1 to n do
> >    begin
> >       a[i,j]:=255;
> >       if (st[i]=doi[st[j]]) and (st[i] in ['(','[']) then
> >       if a[i+1,j-1]<a[i,j] then
> >       begin
> >          a[i,j]:=a[i+1,j-1];
> >          d[i,j]:=0;
> >       end;
> >
> >       for k:=i to j-1 do
> >       if a[i,k]+a[k+1,j]<a[i,j] then
>
> { you haven't defined  the value a[k+1,j] !!! }
>
> >       begin
> >          a[i,j]:=a[i,k]+a[k+1,j];
> >          d[i,j]:=k;
> >       end;
> >    end;
> > end;
> >
> > procedure out(i,j:integer);
> > begin
> >    if i>j then exit;
> >    if i=j then
> >    begin
> >       if st[i] in ['(','['] then write(st[i],doi[st[i]])
> >       else write(doi[st[i]],st[i]);
> >    end
> >    else if d[i,j]=0 then
> >    begin
> >       write(st[i]);
> >       if i+1<=j-1 then out(i+1,j-1);
> >       write(st[j]);
> >    end
> >    else
> >    begin
> >       out(i,d[i,j]);
> >       out(d[i,j]+1,j);
> >    end;
> > end;
> >
> > begin
> >    in_data;
> >    solve;
> >    out(1,n);
> >    writeln;
> > end.
Re: You can find test for this problem at http://neerc.ifmo.ru
Послано meoden 14 июн 2002 20:52
Thanks. I have seen the page of neerc.
Now I've got AC.
By the way, can you tell me some other online contest, like neerc.
Thanks once more.
Maybe no other :-(
Послано Andrey Popyk (popyk@ief.tup.km.ua) 14 июн 2002 22:06
acm.uva.es
acm.timus.ru
ace.delos.com
but you know them :-)

Wow! On neerc you can find ACM World Final 2002.
(neerc.ifmo.ru/online)