[AtCoder] AtCoder Regular Contest 182 B. |{floor(A_i/2^k)}|

TaeGN·2024년 10월 12일

AtCoder

목록 보기
2/55

문제풀이

  1. (1 shl (K - 1) <= A < 1 shl K)이고, 스코어가 최대가 되는 N개의 수를 구한다.
  2. N의 개수가 (1 shl (K - 1))보다 크면 모든 경우를 대입해 주고, 아니면 i는 0에서 N까지, (1 shl (K - 1)) + (i의 bit 좌우 반전 값)을 구한다.

주의사항


소요시간

45분


package AtCoder.ProblemList.Difficulty1000.floorA_i2k

fun main() {
    val sb = StringBuilder()
    fun Int.bitReversal(size: Int): Int {
        var result = 0
        for (i in 0 until size) {
            if ((this and (1 shl i)) != 0) result += (1 shl (size - i - 1))
        }
        return result
    }
    repeat(readln().toInt()) {
        val (N, K) = readln().trim().split(" ").map(String::toInt)
        val max = 1 shl K
        val min = 1 shl (K - 1)
        if (N >= min) repeat(N) { sb.append("${maxOf(1, max - it - 1)} ") }
        else repeat(N) { sb.append("${min + it.bitReversal(K - 1)} ") }
        sb.appendLine()
    }
    println(sb)
}

https://github.com/TaeGN/Algorithm/blob/master/src/AtCoder/ProblemList/Difficulty1000/floorA_i2k/floorA_i2k.kt


문제링크

https://atcoder.jp/contests/arc182/tasks/arc182_b

0개의 댓글