[AtCoder] AtCoder Beginner Contest 346 E. Paint

TaeGN·2024년 10월 21일

AtCoder

목록 보기
14/55

문제풀이

  1. 쿼리를 뒤에서부터 실행한다.
  2. 가로로 칠했으면 h--, 세로로 칠했으면 w--를 해주면서 각 X의 개수를 카운팅한다.

주의사항


소요시간

30분


package AtCoder.ProblemList.Difficulty800_1199.Paint

fun main() {
    val (H, W, M) = readln().trim().split(" ").map(String::toInt)
    val queries = Array(M) { readln().trim().split(" ").map(String::toInt) }
    var h = H.toLong()
    var w = W.toLong()
    val countArr = LongArray(200001).apply { this[0] = H.toLong() * W }
    val visitedH = BooleanArray(H)
    val visitedW = BooleanArray(W)
    for (i in (M - 1) downTo 0) {
        val (T, A, X) = queries[i]
        if (queries[i][0] == 1) {
            if (visitedH[A - 1]) continue
            visitedH[A - 1] = true
            countArr[X] += w
            countArr[0] -= w
            h--
        } else {
            if (visitedW[A - 1]) continue
            visitedW[A - 1] = true
            countArr[X] += h
            countArr[0] -= h
            w--
        }
    }
    var count = 0
    val sb = StringBuilder()
    for (i in countArr.indices) {
        if (countArr[i] > 0) {
            count++
            sb.appendLine("$i ${countArr[i]}")
        }
    }
    println(count)
    println(sb)
}

문제링크

https://atcoder.jp/contests/abc346/tasks/abc346_e

0개의 댓글