結果
問題 | No.168 ものさし |
ユーザー |
|
提出日時 | 2023-01-03 20:23:26 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 356 ms / 2,000 ms |
コード長 | 1,246 bytes |
コンパイル時間 | 224 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 78,252 KB |
最終ジャッジ日時 | 2024-11-27 02:23:09 |
合計ジャッジ時間 | 4,560 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
ソースコード
import sysfrom math import ceilinput = sys.stdin.readlineclass UnionFind:def __init__(self, n):self.par = [-1] * nself.rank = [0] * nself.siz = [1] * ndef root(self, x):if self.par[x] == -1:return xself.par[x] = self.root(self.par[x])return self.par[x]def is_same(self, x, y):return self.root(x) == self.root(y)def unite(self, x, y):if self.is_same(x, y):return Falserx = self.root(x)ry = self.root(y)if self.rank[rx] < self.rank[ry]:rx, ry = ry, rxelif self.rank[rx] == self.rank[ry]:self.rank[rx] += 1self.par[ry] = rxself.siz[rx] += self.siz[ry]return Truen = int(input())points = [tuple(map(int, input().split())) for _ in range(n)]l = 0r = 2 * 10**9for _ in range(35):mid = ceil((l + r) / 20) * 10uf = UnionFind(n)for i in range(n - 1):ix, iy = points[i]for j in range(i + 1, n):jx, jy = points[j]if (ix - jx) ** 2 + (iy - jy) ** 2 <= mid**2:uf.unite(i, j)if uf.is_same(0, n - 1):r = midelse:l = midprint(r)