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

Обсуждение задачи 1207. Медиана на плоскости

My program works right, please check it, or give me some tests please
Послано Redjee 9 май 2010 19:46
type
    point=record x,y:longint; end;
var
    vert:array[1..10000] of point;
    visited:array[1..10000] of byte;
    min:point;
    n,i,k,imin,minvert:integer;
Procedure Search_Min_Polar_Angle;
var
    i:integer;
    min_angle,angle,tg,a,b:real;
begin
    min_angle:=pi;
    for i:=1 to n do
        if (visited[i]=0) then
            begin
                a:=(vert[i].y-vert[imin].y);
                b:=(vert[i].x-vert[imin].x);
                if (b=0) then angle:=pi/2
                         else
                begin
                    tg:=a/b;
                    angle:=arctan(tg);
                end;
                if (angle<min_angle) then
                    begin min_angle:=angle; minvert:=i; end;
            end;
    visited[minvert]:=1;
end;

Begin
    readln(n);
    for i:=1 to n do visited[i]:=0;

    // naxojdenie samoy nijney levoy to4ki
    min.y:=maxlongint;
    for i:=1 to n do
        begin
            readln(vert[i].x,vert[i].y);
            if (vert[i].y<min.y) then
                begin min:=vert[i]; imin:=i; end
            else
            if (vert[i].y=min.y) and (vert[i].x<min.x) then
                begin min:=vert[i]; imin:=i; end;
        end;
    visited[imin]:=1;
    //-----------------------------------

    for k:=1 to n div 2 do Search_Min_Polar_Angle;
    writeln(imin,' ',minvert);
End.

Edited by author 09.05.2010 19:47