[AtCoder] AtCoder Beginner Contest 323 D. Merge Slimes

TaeGN·2024년 10월 29일

AtCoder

목록 보기
26/55

문제풀이

  1. (사이즈, 개수)쌍으로 treeMap에 저장한다.
  2. 사이즈 작은 순으로 합성한다.

주의사항


소요시간

10분


package AtCoder.ProblemList.Difficulty800_1199.MergeSlimes

import java.util.TreeMap

fun main() {
    val N = readln().trim().toInt()
    val map = TreeMap<Long, Long>()
    repeat(N) {
        val (S, C) = readln().trim().split(" ").map(String::toLong)
        map.compute(S) { _, v -> if (v == null) C else v + C }
    }
    var curS = map.firstKey()
    while (curS != null) {
        var value = curS
        var count = map[curS]!!
        map[curS] = count % 2
        while (count > 1) {
            count /= 2
            value *= 2
            if (count % 2 == 1L) map.compute(value) { _, v -> if (v == null) 1 else v + 1 }
        }
        curS = map.higherKey(curS)
    }
    println(map.values.sum())
}

문제링크

https://atcoder.jp/contests/abc323/tasks/abc323_d

0개의 댓글