結果

問題 No.59 鉄道の旅
ユーザー バカらっくバカらっく
提出日時 2019-09-22 09:35:53
言語 Kotlin
(1.9.23)
結果
TLE  
実行時間 -
コード長 1,554 bytes
コンパイル時間 14,887 ms
コンパイル使用メモリ 456,244 KB
実行使用メモリ 108,604 KB
最終ジャッジ日時 2024-09-19 03:27:02
合計ジャッジ時間 23,353 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 321 ms
52,120 KB
testcase_01 AC 324 ms
52,216 KB
testcase_02 AC 326 ms
52,120 KB
testcase_03 AC 329 ms
51,944 KB
testcase_04 TLE -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:1:10: warning: parameter 'arr' is never used
fun main(arr:Array<String>) {
         ^

ソースコード

diff #

fun main(arr:Array<String>) {
    val(station, limit) = readLine()!!.trim().split(" ").map { it.toInt() }
    val log = (1..station).map { readLine()!!.trim().toInt() }
    val block = 1000
    val count = mutableMapOf<Int, Int>()
    val count1000 = mutableMapOf<Int, Int>()
    for(i in log) {
        if(i >= 0) {
            val key1000 = i / block
            var cnt = count1000.filter { it.key > key1000 }.map { it.value }.sum()
            if(cnt >= limit) {
                continue
            }
            cnt += count.filter { it.key>=i && it.key < (key1000+1)*block }.map { it.value }.sum()
            if(cnt >= limit) {
                continue
            }
            count[i]?.also {
                count[i] = it + 1
            }?: run {
                count[i] = 1
            }
            count1000[key1000]?.also {
                count1000[key1000] = it + 1
            } ?: run {
                count1000[key1000] = 1
            }
        } else {
            val key = i * -1
            count[key]?.let { a ->
                if(a <= 1) {
                    count.remove(key)
                } else {
                    count[key] = a - 1
                }
                val key1000 = key / block
                count1000[key1000]?.let {
                    if(it <= 1) {
                        count1000.remove(key1000)
                    } else {
                        count1000[key1000] = it -1
                    }
                }
            }
        }
    }
    println(count.map { it.value }.sum())
}
0