結果

問題 No.168 ものさし
ユーザー バカらっく
提出日時 2019-11-29 09:53:14
言語 Kotlin
(2.1.0)
結果
WA  
実行時間 -
コード長 1,600 bytes
コンパイル時間 14,448 ms
コンパイル使用メモリ 449,500 KB
実行使用メモリ 62,428 KB
最終ジャッジ日時 2024-11-20 21:17:26
合計ジャッジ時間 22,062 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3 WA * 1
other AC * 6 WA * 13
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:4:10: warning: parameter 'arr' is never used
fun main(arr:Array<String>) {
         ^

ソースコード

diff #

import java.math.BigDecimal
import java.util.*

fun main(arr:Array<String>) {
    val pointCount = readLine()!!.toInt()
    var list = (1..pointCount).map {id -> readLine()!!.split(" ").map { it.toLong() }.let { Point(id, it[0].toDouble(), it[1].toDouble()) } }.toMutableList()
    list.forEach {
        it.distanceStart =  dist(it, list.first())
        it.distanceGoal = dist(it, list.last())
    }
    val startPoint = list.first()
    val goalPoint = list.last()

    list = list.filter { it.distanceGoal <= startPoint.distanceGoal && it.distanceStart <= goalPoint.distanceStart }.sortedBy { it.distanceStart }.toMutableList()
    val map = PriorityQueue<Point>(kotlin.Comparator { t, t2 -> t.distanceStart.compareTo(t2.distanceStart) })
    map.add(list.first())
    list.removeAt(0)

    for(p in list) {
        for(p2 in map) {
            val d = dist(p2, p)
            if(d <= p2.distanceStart) {
                p.distanceStart = p2.distanceStart
                break
            } else if(d < p.distanceStart) {
                p.distanceStart = d
            }
        }
        map.add(p)
    }
    println(goalPoint.distanceStart)
}

fun dist(p1:Point, p2:Point):Long {
    var dist = Math.pow(Math.abs(p1.x - p2.x), 2.toDouble())
    dist += Math.pow(Math.abs(p1.y - p2.y), 2.toDouble())
    var ret = Math.ceil(Math.sqrt(dist))
    if(ret * ret < dist) {
        ret += 1
    }
    if(ret % 10 > 0) {
        ret += 10
    }
    return ret.toLong() / 10 * 10
}

class Point(val id:Int, val x:Double, val y:Double) {
    var distanceStart: Long = 0
    var distanceGoal:Long = 0
}
0