結果

問題 No.1890 Many Sequences Sum Queries
ユーザー Daiki HirabayashiDaiki Hirabayashi
提出日時 2023-09-26 22:11:20
言語 Kotlin
(1.9.23)
結果
AC  
実行時間 822 ms / 2,000 ms
コード長 1,429 bytes
コンパイル時間 20,409 ms
コンパイル使用メモリ 423,480 KB
実行使用メモリ 69,812 KB
最終ジャッジ日時 2023-09-26 22:11:56
合計ジャッジ時間 32,107 ms
ジャッジサーバーID
(参考情報)
judge13 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 708 ms
61,544 KB
testcase_01 AC 822 ms
69,812 KB
testcase_02 AC 337 ms
57,092 KB
testcase_03 AC 327 ms
57,072 KB
testcase_04 AC 322 ms
57,392 KB
testcase_05 AC 341 ms
57,016 KB
testcase_06 AC 341 ms
57,264 KB
testcase_07 AC 604 ms
60,412 KB
testcase_08 AC 574 ms
60,160 KB
testcase_09 AC 552 ms
60,292 KB
testcase_10 AC 689 ms
61,888 KB
testcase_11 AC 630 ms
60,316 KB
testcase_12 AC 726 ms
62,656 KB
testcase_13 AC 701 ms
62,240 KB
testcase_14 AC 595 ms
60,408 KB
testcase_15 AC 318 ms
57,200 KB
testcase_16 AC 340 ms
57,500 KB
testcase_17 AC 308 ms
53,164 KB
testcase_18 AC 316 ms
57,352 KB
testcase_19 AC 335 ms
57,036 KB
testcase_20 AC 320 ms
56,908 KB
testcase_21 AC 314 ms
57,096 KB
testcase_22 AC 322 ms
57,504 KB
testcase_23 AC 342 ms
57,100 KB
testcase_24 AC 324 ms
57,280 KB
testcase_25 AC 321 ms
53,036 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.io.PrintWriter

fun main() {
    val (n, q) = readln().split(" ").map { it.toInt() }
    val a = readln().split(" ").map { it.toInt() }.toIntArray()
    val s = Array(q) {
        readln().toInt()
    }

    val pList = (0 until n).map { it ->
        (1..a[it]).map { it.toLong() }
        .let {
            P(it.size, it.sum(), cumulativeSum(it))
        }
    }
    val wholeSum = pList.sumOf { it.sum }

    val out = PrintWriter(System.out)
    for(i in 0 until q) {
        if(s[i] > wholeSum) {
            out.println(-1)
            continue
        }

        var sum = 0L
        var sizeSum = 0L
        for(j in pList.indices) {
            val p = pList[j]

            sizeSum += p.size
            sum += p.sum

            if(sum == s[i].toLong()) {
                out.println(sizeSum)
                break
            } else if(sum > s[i]) {
                sizeSum -= p.size
                sum -= p.sum

                val tmp = p.cumulativeSum.binarySearch(s[i] - sum)
                val index = if(tmp < 0) -(tmp + 1) else tmp

                out.println(sizeSum + index)
                break
            }
        }
    }

    out.flush()
}

data class P(
    val size: Int,
    val sum: Long,
    val cumulativeSum: LongArray,
)

fun cumulativeSum(a: List<Long>): LongArray {
    val s = LongArray(a.size + 1)
    for(i in a.indices) {
        s[i+1] = s[i] + a[i]
    }
    return s
}
0