結果

問題 No.1391 ±1 Abs Sum
コンテスト
ユーザー zeronosu77108
提出日時 2021-02-12 22:55:08
言語 Kotlin
(2.3.20)
コンパイル:
kotlinc _filename_ -include-runtime -d main.jar
実行:
kotlin main.jar
結果
WA  
実行時間 -
コード長 734 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 9,940 ms
コンパイル使用メモリ 481,208 KB
実行使用メモリ 597,124 KB
最終ジャッジ日時 2026-04-02 19:02:34
合計ジャッジ時間 46,852 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 31 WA * 2 MLE * 1
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:9:23: warning: unnecessary non-null assertion (!!) on a non-null receiver of type 'Long'.
    val amin = a.min()!!
                      ^^
Main.kt:10:23: warning: unnecessary non-null assertion (!!) on a non-null receiver of type 'Long'.
    val amax = a.max()!!
                      ^^

ソースコード

diff #
raw source code

import kotlin.collections.*
import kotlin.math.*

@kotlin.ExperimentalStdlibApi
fun main() {
    val (n, k) = readLine()!!.split(" ").map { it.toInt() }
    val a = readLine()!!.split(" ").map { it.toLong() }.toTypedArray().sorted()

    val amin = a.min()!!
    val amax = a.max()!!

    fun f(ai : Long) : Long {
        val l = a.map { abs(ai - it) }.sorted()
        return l.take(k).sum() - l.takeLast(n-k).sum()
    }

    var l = 0; var r = n - 1
    while(l + 10 < r) {
        val ll = (l+l+r) / 3
        val rr = (l+r+r) / 3

        if (f(a[ll]) < f(a[rr])) r = rr
        else l = ll
    }

    var ans = minOf(f(a.first()), f(a.last()))
    for (i in l .. r) {
        ans = minOf(ans, f(a[i]))
    }
    println(ans)
}
0