結果
問題 | No.168 ものさし |
ユーザー | nebukuro09 |
提出日時 | 2016-09-27 14:03:51 |
言語 | PyPy2 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,280 bytes |
コンパイル時間 | 2,760 ms |
コンパイル使用メモリ | 76,800 KB |
実行使用メモリ | 160,128 KB |
最終ジャッジ日時 | 2024-11-21 07:16:13 |
合計ジャッジ時間 | 16,432 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 302 ms
81,084 KB |
testcase_01 | WA | - |
testcase_02 | AC | 71 ms
75,820 KB |
testcase_03 | AC | 72 ms
75,668 KB |
testcase_04 | AC | 73 ms
75,680 KB |
testcase_05 | AC | 71 ms
75,520 KB |
testcase_06 | AC | 88 ms
77,952 KB |
testcase_07 | AC | 72 ms
75,660 KB |
testcase_08 | AC | 72 ms
75,520 KB |
testcase_09 | AC | 144 ms
79,360 KB |
testcase_10 | AC | 197 ms
78,976 KB |
testcase_11 | AC | 642 ms
80,896 KB |
testcase_12 | AC | 1,972 ms
85,524 KB |
testcase_13 | TLE | - |
testcase_14 | TLE | - |
testcase_15 | AC | 74 ms
76,288 KB |
testcase_16 | AC | 125 ms
78,464 KB |
testcase_17 | AC | 143 ms
79,104 KB |
testcase_18 | AC | 174 ms
79,360 KB |
testcase_19 | AC | 767 ms
87,168 KB |
testcase_20 | AC | 783 ms
87,424 KB |
testcase_21 | AC | 824 ms
87,216 KB |
testcase_22 | AC | 805 ms
87,360 KB |
ソースコード
import math class UnionFind(object): def __init__(self, n): self.uf = [-1 for _ in xrange(n)] def union(self, x, y): x = self.find(x) y = self.find(y) if x == y: return if self.uf[x] >= self.uf[y]: self.uf[y] += self.uf[x] self.uf[x] = y else: self.uf[x] += self.uf[y] self.uf[y] = x def find(self, x): leaves = [] while self.uf[x] >= 0: leaves.append(x) x = self.uf[x] for lf in leaves: self.uf[lf] = x return x N = input() points = [map(int, raw_input().split()) for _ in xrange(N)] f = lambda p1, p2:(p1[0]-p2[0])**2+(p1[1]-p2[1])**2 dists = [[0 for i in xrange(N)] for j in xrange(N)] for i in xrange(N): for j in xrange(i+1, N): dists[i][j] = f(points[i], points[j]) high = 8*10**18 low = 0 while high - low > 1: uf = UnionFind(N) middle = (high+low)/2 for i in xrange(N): for j in xrange(i+1, N): if dists[i][j] <= middle: uf.union(i, j) if uf.find(0) == uf.find(N-1): high = middle else: low = middle sqrt = int(math.sqrt(high)) if sqrt**2 != high: sqrt += 1 print sqrt/10*10+(sqrt%10>0)*10