結果

問題 No.2909 Imaginary Summer
ユーザー 👑 p-adicp-adic
提出日時 2024-09-29 10:49:26
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,212 bytes
コンパイル時間 372 ms
コンパイル使用メモリ 82,296 KB
実行使用メモリ 104,912 KB
最終ジャッジ日時 2024-10-02 17:49:32
合計ジャッジ時間 76,119 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 12 WA * 1 TLE * 5 -- * 19
権限があれば一括ダウンロードができます

ソースコード

diff #

R=range
import time
import random
import math
def TwoDimensionalAllSmallestWeightRandomised(d2,S,T,bucket_size,time_bound):
	S_size = len(S); T_size = len(T)
	if S_size == 0:return[]
	assert( T_size > 0 )
	answer = [9**18]*S_size
	line = [0]*T_size
	now = time.time()
	time_bound /= 1000
	while time.time() - now < time_bound:
		theta = random.randint( -1000 , 1000 ) * 0.00314
		dx = math.cos( theta ) ; dy = math.sin( theta )
		for j in R(T_size):line[j] = [ T[j][0] * dx + T[j][1] * dy , j ]
		line.sort()
		for i in R(S_size):
			proj_i = S[i][0] * dx + S[i][1] * dy
			l , r = 0 , T_size
			while l + 1 < r:
				m = ( l + r ) >> 1
				if proj_i < line[m][0]:r = m
				else:l = m
			j_min = max( 0 , l - bucket_size )
			j_ulim = min( T_size , l + bucket_size )
			answer[i] = min( answer[i] , min( d2( S[i] , T[line[j][1]] ) for j in R(j_min,j_ulim) ) )
	return answer

def d2(u,v):return (u[0]-v[0])**2+(u[1]-v[1])**2

J=lambda:list(map(int,input().split()))
N,M,K=J()
N+=1
XY=[J()for i in R(N)]
AB=[J()for k in R(K)]
d=min(d2(XY[0],XY[i])for i in R(1,N))**0.5
ann=TwoDimensionalAllSmallestWeightRandomised(d2,AB,XY,300,4000)
answer=sum(min(d2(XY[0],AB[k])**0.5,d+ann[k]**0.5)for k in R(K))
print(answer*2)
0