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

Обсуждение задачи 1185. Wall

Показать все сообщения Спрятать все сообщения

Help! qaztz 29 мар 2002 17:37
I got wa.:(

Here is my program:
{$q+,n+}
var n,l,a,c,ee:longint; tot:extended;
    b,d:array[0..1000,1..2] of longint;
    e:array[1..1001] of longint;
function z(a1:longint):boolean;
var b1,c1,d1,e1:longint;
begin
  b1:=b[e[a1],1]-b[e[a1-1],1]; c1:=b[e[a1],2]-b[e[a1-1],2];
  d1:=b[e[a1-1],1]-b[e[a1-2],1]; e1:=b[e[a1-1],2]-b[e[a1-2],2];
  if b1*e1-c1*d1<=0 then z:=true
    else z:=false;
end;
begin
  assign(input,''); reset(input);
  assign(output,''); rewrite(output);
  read(n,l);
  for a:=1 to n do read(b[a,1],b[a,2]);
  c:=1;
  for a:=2 to n do
    if (b[a,1]<b[c,1])or(b[a,1]=b[c,1])and(b[a,2]<b[c,2]) then c:=a;
  d:=b;
  for a:=c to n do b[a-c+1]:=d[a];
  for a:=1 to c-1 do b[n-c+1+a]:=d[a];
  e[1]:=1; ee:=1;
  for a:=2 to n do begin
    inc(ee); e[ee]:=a;
    while (ee>2)and z(ee) do begin
      e[ee-1]:=e[ee]; dec(ee);
    end;
  end;
  tot:=2*pi*l;
  e[ee+1]:=e[1];
  for a:=1 to ee do
    tot:=tot+sqrt(sqr(b[e[a],1]-b[e[a+1],1])+sqr(b[e[a],2]-b[e
[a+1],2]));
  writeln(tot:0:0);
  close(input); close(output);
end.

Thank you!