結果
| 問題 |
No.94 圏外です。(EASY)
|
| コンテスト | |
| ユーザー |
mura40424
|
| 提出日時 | 2016-12-18 17:32:04 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,558 bytes |
| コンパイル時間 | 14,069 ms |
| コンパイル使用メモリ | 441,868 KB |
| 実行使用メモリ | 53,568 KB |
| 最終ジャッジ日時 | 2024-11-20 07:19:22 |
| 合計ジャッジ時間 | 25,008 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 22 |
コンパイルメッセージ
Main.kt:1:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
^
ソースコード
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