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

Обсуждение задачи 1078. Отрезки

Why I get Wrong Answer? Who can help me?
Послано Koala 10 мар 2002 17:28
It is my program here. I don't know what is wrong with it.

program segment;
const
  maxn=500;
var
  c,d:array [1..maxn] of longint;
  b:array [1..maxn,1..2] of longint;
  a:array [1..maxn,1..maxn] of shortint;
  n,i,j,max,pp,mi:longint;
  procedure print(i:longint);
  var
    j:longint;
  begin
    if c[i]=0
      then write(i)
      else begin
        j:=1;
        while c[j]+1<>c[i] do inc(j);
        print(j);
        write(' ',i);
      end;
  end;
begin
  assign(input,'');
  assign(output,'');
  reset(input);
  fillchar(a,sizeof(a),0);
  fillchar(d,sizeof(d),0);
  readln(n);
  for i:=1 to n do
  begin
    readln(b[i,1],b[i,2]);
    for j:=1 to i-1 do
    begin
      if (b[j,1]<b[i,1]) and (b[j,2]>b[i,2]) then
      begin
        a[i,j]:=1;
        inc(d[j]);
      end;
      if (b[j,1]>b[i,1]) and (b[j,2]<b[i,2]) then
      begin
        a[j,i]:=1;
        inc(d[i]);
      end;
    end;
  end;
  close(input);

  fillchar(c,sizeof(c),0);
  for pp:=1 to n do
  begin
    j:=1;
    while d[j]<>0 do inc(j);
    d[j]:=-1;
    for i:=1 to n do
      if a[j,i]=1 then dec(d[i]);
    for i:=1 to n do
      if (a[i,j]=1) and (c[i]+1>c[j]) then c[j]:=c[i]+1;
  end;

  rewrite(output);
  max:=-maxlongint;
  for i:=1 to n do
    if c[i]>max then
    begin
      max:=c[i];
      mi:=i;
    end;
  writeln(max+1);
  print(mi);
  writeln;
  close(output);
end.