結果

問題 No.168 ものさし
ユーザー バカらっくバカらっく
提出日時 2019-11-29 09:53:14
言語 Kotlin
(1.9.23)
結果
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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 366 ms
61,088 KB
testcase_01 AC 303 ms
60,368 KB
testcase_02 AC 295 ms
60,332 KB
testcase_03 AC 296 ms
60,380 KB
testcase_04 AC 301 ms
60,328 KB
testcase_05 WA -
testcase_06 AC 306 ms
60,492 KB
testcase_07 AC 301 ms
60,416 KB
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 AC 310 ms
60,380 KB
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 AC 392 ms
62,196 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
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