⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex.dpr

📁 tongji acm-online judge solution
💻 DPR
字号:
{$N+}
program Ural_1207(Input, Output);
const
    MaxN = 10000;
    MaxValue = 1E10;
type
    TIndex = Longint;
    TData = Extended;
    TPoint = record
        X, Y: TData;
    end;
    TListItem = record
        P: TPoint;
        ID: TIndex;
    end;
    TList = array[1..MaxN] of TListItem;
var
    Q: TList;
    N: TIndex;

procedure Swap(var A, B: TListItem);
var
    T: TListItem;
begin
    T := A;
    A := B;
    B := T;
end;

function Slope(P: TPoint): TData;
begin
    if Abs(P.X - Q[1].P.X) < 1E-10 then
        Slope := MaxValue
    else
        Slope := (P.Y - Q[1].P.Y) / (P.X - Q[1].P.X);
end;

procedure QuickSort(l, r: TIndex);
var
    i, j: TIndex;
    X: TListItem;
begin
    i := l;
    j := r;
    X := Q[Random(r - l + 1) + l];
    repeat
        while Slope(Q[i].P) < Slope(X.P) do
            Inc(i);
        while Slope(X.P) < Slope(Q[j].P) do
            Dec(j);
        if i <= j then
        begin
            Swap(Q[i], Q[j]);
            Inc(i);
            Dec(j);
        end;
    until i > j;
    if l < j then QuickSort(l, j);
    if i < r then QuickSort(i, r);
end;

procedure Main;
var
    i, k: TIndex;
begin
    FillChar(Q, SizeOf(Q), 0);
    Randomize;
    Readln(N);
    for i := 1 to N do
    begin
        Readln(Q[i].P.X, Q[i].P.Y);
        Q[i].ID := i;
    end;
    k := 1;
    for i := 2 to N do
        if (Q[k].P.X > Q[i].P.X) or ((Q[k].P.X = Q[i].P.X) and (Q[k].P.Y > Q[i].P.Y)) then
            k := i;
    Swap(Q[1], Q[k]);
    QuickSort(2, N);
    Writeln(Q[1].ID, ' ', Q[(2 + N) div 2].ID);
end;
begin
    Main;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -