結果
問題 | No.94 圏外です。(EASY) |
ユーザー |
![]() |
提出日時 | 2015-06-11 17:41:29 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 366 ms / 5,000 ms |
コード長 | 1,464 bytes |
コンパイル時間 | 304 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 34,688 KB |
最終ジャッジ日時 | 2024-06-26 07:36:14 |
合計ジャッジ時間 | 5,578 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
ソースコード
import mathdef dist2(p1, p2):return (p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2def md(ds, g):g = list(g)m = 0for i in range(len(g)):for j in range(i + 1, len(g)):d2 = ds[g[i]][g[j]]if d2 > m:m = d2return mdef solve(n, ps):ds = [[0] * n for i in range(n)]for i in range(n):pi = ps[i]for j in range(i + 1, n):pj = ps[j]d2 = dist2(pi, pj)ds[i][j] = ds[j][i] = d2g = [None] * ngs = []# 相互通信できるグループに分けるfor i in range(n):if g[i] is not None:continueg[i] = {i}gs.append(g[i])stack = [i]while stack:j = stack.pop()for k in range(n):if g[k] is not None:continueif ds[j][k] > 100:continueg[k] = g[j]g[k].add(k)stack.append(k)# グループ内のアンテナの間の最大距離をグループごとに求める# それの最大値 + 2 が答えif len(gs) < 1:return 1mmd = math.sqrt(max(md(ds, g) for g in gs))return mmd + 2def main():n = int(input())ps = []for i in range(n):ps.append(tuple(map(int, input().split())))a = solve(n, ps)print(a)if __name__ == '__main__':main()