結果

問題 No.1890 Many Sequences Sum Queries
ユーザー Daiki Hirabayashi
提出日時 2023-09-26 22:11:20
言語 Kotlin
(2.1.0)
結果
AC  
実行時間 787 ms / 2,000 ms
コード長 1,429 bytes
コンパイル時間 16,333 ms
コンパイル使用メモリ 447,464 KB
実行使用メモリ 85,032 KB
最終ジャッジ日時 2024-07-19 15:58:55
合計ジャッジ時間 27,860 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 25
権限があれば一括ダウンロードができます

ソースコード

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