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

Обсуждение задачи 1245. Картины

CAN ANYONE TELL ME WHAT'S WRONG WITH MY PROGRAM??
Послано beiyz 21 мар 2003 18:28
program ex;
type xx=record
     l,r,b,t:longint;
     end;
var a:array[1..1000] of xx;
    bb,tt,rr,ll,b1,t1,r1,l1:array[1..1000] of longint;
    c:xx;
    p1,q1,p2,q2,s,i,j,n,r,x,y,maxx,minx,maxy,miny:longint;

begin
  readln(n);
  fillchar(a,sizeof(a),0);
  maxx:=-maxint; maxy:=-maxint;
  minx:=maxint; miny:=maxint;
  for i:=1 to n do
  begin
    readln(r,x,y);
    a[i].l:=x-r; a[i].r:=x+r;
    a[i].t:=y+r; a[i].b:=y-r;
    if a[i].l<minx then minx:=a[i].l;
    if a[i].r>maxx then maxx:=a[i].r;
    if a[i].t>maxy then maxy:=a[i].t;
    if a[i].b<miny then miny:=a[i].b;
  end;
  p1:=maxx-minx;
  q1:=maxy-miny;
  if p1<100 then p1:=100; if q1<100 then q1:=100;
  s:=p1*q1;

  for i:=1 to n-1 do
    for j:=i+1 to n do
    if a[i].l>a[j].l then
    begin
      c:=a[i]; a[i]:=a[j]; a[j]:=c;
    end;
  bb[1]:=a[1].b; tt[1]:=a[1].t; rr[1]:=a[1].r;
  for i:=2 to n do
  begin
    if a[i].b<bb[i-1] then bb[i]:=a[i].b else bb[i]:=bb[i-1];
    if a[i].t>tt[i-1] then tt[i]:=a[i].t else tt[i]:=tt[i-1];
    if a[i].r>rr[i-1] then rr[i]:=a[i].r else rr[i]:=rr[i-1];
  end;
  b1[n]:=a[n].b; t1[n]:=a[n].t;
  for i:=n-1 downto 1 do
  begin
    if a[i].b<b1[i+1] then b1[i]:=a[i].b else b1[i]:=b1[i+1];
    if a[i].t>t1[i+1] then t1[i]:=a[i].t else t1[i]:=t1[i+1];
  end;
  for i:=1 to n-1 do
    if a[i+1].l>rr[i] then
    begin
      p1:=rr[i]-a[1].l;
      q1:=tt[i]-bb[i];
      p2:=rr[n]-a[i+1].l;
      q2:=t1[i+1]-b1[i+1];
      if p1<100 then p1:=100; if p2<100 then p2:=100;
      if q1<100 then q1:=100; if q2<100 then q2:=100;
      if p1*q1+p2*q2<s then s:=p1*q1+p2*q2;
    end;

  for i:=1 to n-1 do
    for j:=i+1 to n do
    if a[i].b>a[j].b then
    begin
      c:=a[i]; a[i]:=a[j]; a[j]:=c;
    end;
  ll[1]:=a[1].l; tt[1]:=a[1].t; rr[1]:=a[1].r;
  for i:=2 to n do
  begin
    if a[i].l<ll[i-1] then ll[i]:=a[i].l else ll[i]:=ll[i-1];
    if a[i].t>tt[i-1] then tt[i]:=a[i].t else tt[i]:=tt[i-1];
    if a[i].r>rr[i-1] then rr[i]:=a[i].r else rr[i]:=rr[i-1];
  end;
  l1[n]:=a[n].l; r1[n]:=a[n].r;
  for i:=n-1 downto 1 do
  begin
    if a[i].l<l1[i+1] then l1[i]:=a[i].l else l1[i]:=l1[i+1];
    if a[i].r>r1[i+1] then r1[i]:=a[i].r else r1[i]:=r1[i+1];
  end;
  for i:=1 to n-1 do
    if a[i+1].b>tt[i] then
    begin
      p1:=tt[i]-a[1].b;
      q1:=rr[i]-ll[i];
      p2:=tt[n]-a[i+1].b;
      q2:=r1[i+1]-l1[i+1];
      if p1<100 then p1:=100; if p2<100 then p2:=100;
      if q1<100 then q1:=100; if q2<100 then q2:=100;
      if p1*q1+p2*q2<s then s:=p1*q1+p2*q2;
    end;
  writeln(s);
end.