結果
| 問題 | No.94 圏外です。(EASY) |
| コンテスト | |
| ユーザー |
mura40424
|
| 提出日時 | 2016-12-18 17:32:04 |
| 言語 | Kotlin (2.3.20) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,558 bytes |
| 記録 | |
| コンパイル時間 | 9,295 ms |
| コンパイル使用メモリ | 480,364 KB |
| 実行使用メモリ | 55,584 KB |
| 最終ジャッジ日時 | 2026-05-14 07:43:52 |
| 合計ジャッジ時間 | 15,881 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 22 |
ソースコード
fun main(args: Array<String>) {
val N = readLine()!!.toInt()
val X = Array(N, {0})
val Y = Array(N, {0})
(0 until N).forEach {
val xy = readLine()!!.split(" ").map { it.toInt() }
X[it] = xy.first()
Y[it] = xy.last()
}
val union = UnionFind(N)
(0 until N).forEach { i ->
(i+1 until N).forEach { j ->
if (distNotSqrt(X[i] - X[j], Y[i] - Y[j]) >= 100) {
union.union(i, j)
}
}
}
var mx = 0
(0 until N).forEach { i ->
(i+1 until N).forEach { j ->
if (union.isSame(i, j)) {
val len = distNotSqrt(X[i] - X[j], Y[i] - Y[j])
if (mx < len)
mx = len
}
}
}
println(mx)
}
fun distNotSqrt(a: Int, b: Int) = a * a + b * b
class UnionFind(N : Int) {
val parent = Array(N, { i -> i })
val rank = Array(N, { 0 })
fun union(a : Int, b : Int) : Boolean {
val Aroot = find(a)
val Broot = find(b)
if (Aroot == Broot) return false
if (rank[Aroot] > rank[Broot]) {
parent[Broot] = Aroot
} else if (rank[Aroot] < rank[Broot]) {
parent[Aroot] = Broot
} else {
parent[Aroot] = Broot
rank[Broot]++
}
return true
}
fun find(a : Int) : Int {
if (parent[a] == a) {
return a
} else {
return find(parent[a])
}
}
fun isSame(a : Int, b : Int) : Boolean = find(a) == find(b)
}
mura40424