結果
問題 | No.168 ものさし |
ユーザー |
![]() |
提出日時 | 2017-03-26 20:48:55 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 485 ms / 2,000 ms |
コード長 | 2,192 bytes |
コンパイル時間 | 1,165 ms |
コンパイル使用メモリ | 107,648 KB |
実行使用メモリ | 26,624 KB |
最終ジャッジ日時 | 2024-12-24 07:18:03 |
合計ジャッジ時間 | 5,559 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;using System.Linq;using System.Collections;using System.Collections.Generic;class Program{static void Main(){new Magatro().Solve();}}public class Magatro{private int N;private long[] X, Y;private S[] Arr;private int[] Size;private int[] Par;private void Scan(){N = int.Parse(Console.ReadLine());X = new long[N];Y = new long[N];for (int i = 0; i < N; i++){var line = Console.ReadLine().Split(' ');X[i] = int.Parse(line[0]);Y[i] = int.Parse(line[1]);}}private void Union(S s){Union(s.A, s.B);}private void Union(int a, int b){a = Root(a);b = Root(b);if (a == b) return;Par[b] = a;Size[a] += Size[b];}private bool Same(int a, int b){return Root(a) == Root(b);}private int Root(int a){if (Par[a] == a) return a;return Root(Par[a]);}public void Solve(){Scan();int index = 0;Arr = new S[(N - 1) * N / 2];for (int i = 0; i < N - 1; i++){for (int j = i + 1; j < N; j++){var dist = (X[i] - X[j]) * (X[i] - X[j]) + (Y[i] - Y[j]) * (Y[i] - Y[j]);Arr[index] = new S(i, j, dist);index++;}}Array.Sort(Arr, (a, b) => a.Dist.CompareTo(b.Dist));Size = (new int[N]).Select(i => 1).ToArray();Par = (new int[N]).Select((i, j) => j).ToArray();int ind = 0;for (long l = 10; true; l += 10){long dist = l * l;for (int i = ind; Arr[i].Dist <= dist; i++){ind++;Union(Arr[i]);if (Same(0, N - 1)){Console.WriteLine(l);return;}}}}}struct S{public int A, B;public long Dist;public S(int a, int b, long dist){A = a;B = b;Dist = dist;}}