[AtCoder] AtCoder Beginner Contest 321 D. Set Menu

TaeGN·2024년 10월 29일

AtCoder

목록 보기
27/55

문제풀이

  1. 누적합과 투 포인터를 사용하여 효율적으로 합을 구한다.

주의사항


소요시간

12분


package AtCoder.ProblemList.Difficulty800_1199.SetMenu

fun main() {
    val (N, M, P) = readln().trim().split(" ").map(String::toInt)
    val A = readln().trim().split(" ").map(String::toInt).sorted()
    val B = readln().trim().split(" ").map(String::toInt).sorted()
    val sumB = LongArray(B.size)
    for (i in B.indices) {
        sumB[i] = sumB.getOrElse(i - 1) { 0 } + B[i]
    }
    var j = M - 1
    var result = 0L
    for (i in 0 until N) {
        while (j >= 0 && A[i] + B[j] >= P) j--
        result += A[i].toLong() * (j + 1) + sumB.getOrElse(j) { 0 } + P.toLong() * (M - (j + 1))
    }
    println(result)
}

문제링크

https://atcoder.jp/contests/abc321/tasks/abc321_d

0개의 댓글