{
Author:wzx961008
Problem:HNOI 2011-rectangle
Verdict:Accepted
Language:PASCAL
Run Time:4.53s
AC Date:17.07.11
}
uses math;
const maxn= 1500 + 1 ;
type pair= record
pn1, pn2: longint ;
end ;
episode= record
x, y, r: int64;
pr: pair;
end ;
point= record
x, y: int64;
end ;
var eps: array [ 1 .. maxn * maxn] of episode;
p: array [ 1 .. maxn ] of point;
n, epsnum: longint ;
procedure qsort( l, r: longint ) ;
var i, j: longint ;
x, t1: episode;
begin
i: = l; j: = r; x: = eps[ l+ random( r- l- 1 ) + 1 ] ;
repeat
while ( eps[ i] . x <x. x ) or ( ( eps[ i] . x = x. x ) and ( eps[ i] . y <x. y ) ) or ( ( eps[ i] . x = x. x ) and ( eps[ i] . y = x. y ) and ( eps[ i] . r <x. r ) ) do inc( i) ;
while ( eps[ j] . x >x. x ) or ( ( eps[ j] . x = x. x ) and ( eps[ j] . y >x. y ) ) or ( ( eps[ j] . x = x. x ) and ( eps[ j] . y = x. y ) and ( eps[ j] . r >x. r ) ) do dec( j) ;
if i<= j then begin
t1: = eps[ i] ; eps[ i] : = eps[ j] ; eps[ j] : = t1;
inc( i) ; dec( j) ;
end ;
until i>j;
if l<j then qsort( l, j) ;
if i<r then qsort( i, r) ;
end ;
procedure init;
var i, j: longint ;
begin
readln ( n) ;
for i: = 1 to n do begin
readln ( p[ i] . x , p[ i] . y ) ;
for j: = 1 to i- 1 do begin
inc( epsnum) ;
eps[ epsnum] . x : = p[ i] . x + p[ j] . x ;
eps[ epsnum] . y : = p[ i] . y + p[ j] . y ;
eps[ epsnum] . r : = sqr( p[ i] . x - p[ j] . x ) + sqr( p[ i] . y - p[ j] . y ) ;
eps[ epsnum] . pr . pn1 : = i; eps[ epsnum] . pr . pn2 : = j;
end ;
end ;
randomize;
qsort( 1 , epsnum) ;
end ;
function euclid( p1, p2: point) : extended;
begin
exit( sqrt ( sqr( p1. x - p2. x ) + sqr( p1. y - p2. y ) ) ) ;
end ;
procedure main;
var i, j: longint ;
ans: int64;
begin
ans: = 0 ;
for i: = 1 to epsnum do
for j: = i- 1 downto 1 do
if ( eps[ i] . x = eps[ j] . x ) and ( eps[ i] . y = eps[ j] . y ) and ( eps[ i] . r = eps[ j] . r ) then begin
ans: = max( ans, round( euclid( p[ eps[ i] . pr . pn1 ] , p[ eps[ j] . pr . pn1 ] ) * euclid( p[ eps[ i] . pr . pn2 ] , p[ eps[ j] . pr . pn1 ] ) ) ) ;
end else break ;
writeln ( ans) ;
end ;
begin
init;
main;
end .
ewogQXV0aG9yOnd6eDk2MTAwOAogUHJvYmxlbTpITk9JIDIwMTEtcmVjdGFuZ2xlCiBWZXJkaWN0OkFjY2VwdGVkCiBMYW5ndWFnZTpQQVNDQUwKIFJ1biBUaW1lOjQuNTNzCiBBQyBEYXRlOjE3LjA3LjExCn0KdXNlcyBtYXRoOwpjb25zdCBtYXhuPTE1MDArMTsKdHlwZSBwYWlyPXJlY29yZAogICAgICBwbjEscG4yOmxvbmdpbnQ7CiAgICAgZW5kOwogICAgIGVwaXNvZGU9cmVjb3JkCiAgICAgIHgseSxyOmludDY0OwogICAgICBwcjpwYWlyOwogICAgIGVuZDsKICAgICBwb2ludD1yZWNvcmQKICAgICAgeCx5OmludDY0OwogICAgIGVuZDsKdmFyIGVwczphcnJheVsxLi5tYXhuKm1heG5db2YgZXBpc29kZTsKICAgIHA6YXJyYXlbMS4ubWF4bl1vZiBwb2ludDsKICAgIG4sZXBzbnVtOmxvbmdpbnQ7CnByb2NlZHVyZSBxc29ydChsLHI6bG9uZ2ludCk7CnZhciBpLGo6bG9uZ2ludDsKICAgIHgsdDE6ZXBpc29kZTsKYmVnaW4KIGk6PWw7IGo6PXI7IHg6PWVwc1tsK3JhbmRvbShyLWwtMSkrMV07CiByZXBlYXQKICB3aGlsZSAoZXBzW2ldLng8eC54KW9yKChlcHNbaV0ueD14LngpYW5kKGVwc1tpXS55PHgueSkpb3IoKGVwc1tpXS54PXgueClhbmQoZXBzW2ldLnk9eC55KWFuZChlcHNbaV0ucjx4LnIpKSBkbyBpbmMoaSk7CiAgd2hpbGUgKGVwc1tqXS54PngueClvcigoZXBzW2pdLng9eC54KWFuZChlcHNbal0ueT54LnkpKW9yKChlcHNbal0ueD14LngpYW5kKGVwc1tqXS55PXgueSlhbmQoZXBzW2pdLnI+eC5yKSkgZG8gZGVjKGopOwogIGlmIGk8PWogdGhlbiBiZWdpbgogICB0MTo9ZXBzW2ldOyBlcHNbaV06PWVwc1tqXTsgZXBzW2pdOj10MTsKICAgaW5jKGkpOyBkZWMoaik7CiAgZW5kOwogdW50aWwgaT5qOwogaWYgbDxqIHRoZW4gcXNvcnQobCxqKTsKIGlmIGk8ciB0aGVuIHFzb3J0KGkscik7CmVuZDsKcHJvY2VkdXJlIGluaXQ7CnZhciBpLGo6bG9uZ2ludDsKYmVnaW4KIHJlYWRsbihuKTsKIGZvciBpOj0xIHRvIG4gZG8gYmVnaW4KICByZWFkbG4ocFtpXS54LHBbaV0ueSk7CiAgZm9yIGo6PTEgdG8gaS0xIGRvIGJlZ2luCiAgIGluYyhlcHNudW0pOwogICBlcHNbZXBzbnVtXS54Oj1wW2ldLngrcFtqXS54OwogICBlcHNbZXBzbnVtXS55Oj1wW2ldLnkrcFtqXS55OwogICBlcHNbZXBzbnVtXS5yOj1zcXIocFtpXS54LXBbal0ueCkrc3FyKHBbaV0ueS1wW2pdLnkpOwogICBlcHNbZXBzbnVtXS5wci5wbjE6PWk7IGVwc1tlcHNudW1dLnByLnBuMjo9ajsKICBlbmQ7CiBlbmQ7CiByYW5kb21pemU7CiBxc29ydCgxLGVwc251bSk7CmVuZDsKZnVuY3Rpb24gZXVjbGlkKHAxLHAyOnBvaW50KTpleHRlbmRlZDsKYmVnaW4KIGV4aXQoc3FydChzcXIocDEueC1wMi54KStzcXIocDEueS1wMi55KSkpOwplbmQ7CnByb2NlZHVyZSBtYWluOwp2YXIgaSxqOmxvbmdpbnQ7CiAgICBhbnM6aW50NjQ7CmJlZ2luCiBhbnM6PTA7CiBmb3IgaTo9MSB0byBlcHNudW0gZG8KICBmb3Igajo9aS0xIGRvd250byAxIGRvCiAgIGlmIChlcHNbaV0ueD1lcHNbal0ueClhbmQoZXBzW2ldLnk9ZXBzW2pdLnkpYW5kKGVwc1tpXS5yPWVwc1tqXS5yKSB0aGVuIGJlZ2luCiAgICBhbnM6PW1heChhbnMscm91bmQoZXVjbGlkKHBbZXBzW2ldLnByLnBuMV0scFtlcHNbal0ucHIucG4xXSkqZXVjbGlkKHBbZXBzW2ldLnByLnBuMl0scFtlcHNbal0ucHIucG4xXSkpKTsKICAgZW5kIGVsc2UgYnJlYWs7CiB3cml0ZWxuKGFucyk7CmVuZDsKYmVnaW4KIGluaXQ7CiBtYWluOwplbmQu
compilation info
Free Pascal Compiler version 2.2.0 [2009/11/16] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for i386
Compiling prog.pas
prog.pas(27,5) Note: Local variable "t2" not used
Linking prog
76 lines compiled, 0.1 sec
1 note(s) issued
stdout