p2107.dpr

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· DPR 代码 · 共 84 行

DPR
84
字号
program p2107;

{$APPTYPE CONSOLE}

const
        maxn    = 100000;

type
        node    = record
                x , y   : Real;
                dis     : Real;
                end;

        Tdata   = array[1..maxn] of node;

var
        n               : Longint;
        mid             : node;
        data            : Tdata;

function dis_ ( x1 , y1 , x2 , y2 : real ) : real;
begin
dis_ := sqrt ( sqr ( x1 - x2 ) + sqr ( y1 - y2 ) );
end;

procedure qsort ( left , right : Longint );
var     i , j   : Longint;
        t       : node;
        key     : Real;
begin
i := left - 1; j := right + 1; key := data [left+random ( right - left )] .dis;
repeat
        repeat dec ( j ); until data [j] .dis <= key;
        repeat inc ( i ); until data [i] .dis >= key;
        if ( i < j ) then begin t := data [i]; data [i] := data [j]; data [j] := t; end
                else break;
until false;
if ( j + 1 < right ) then qsort ( j + 1 , right );
if ( left < j ) then qsort ( left , j );
end;

procedure init;
var     i       : Longint;
begin
mid .x := 0; mid .y := 0;
for i := 1 to n do
        begin
        readln ( data [i] .x , data [i] .y );
        mid .x := mid .x + data [i] .x;
        mid .y := mid .y + data [i] .y;
        end;
mid .x := mid .x / n; mid .y := mid .y / n;
for i := 1 to n do
        data [i] .dis := dis_ ( mid .x , mid .y , data [i] .x , data [i] .y );
qsort ( 1 , n );
end;

procedure main;
var     i , j   : Longint;
        min     : Real;
        t       : Real;
begin
min := 1e20;
for i := 1 to n do
        for j := i - 1 downto 1 do
                begin
                t := dis_ ( data [i] .x , data [i] .y , data [j] .x , data [j] .y );
                if t < min then min := t;
		  if ( data [j].dis + min < data [i].dis ) then break;
                end;
writeln ( min / 2 : 0 : 2 );
end;

begin
randomize;
while true do
        begin
        read ( n ); if n = 0 then break;
        init;
        main;
        end
end.

⌨️ 快捷键说明

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