카테고리 없음

[codeforces][Kotlin] 1343B - Balanced Array

태오님 2023. 3. 23. 16:47

https://codeforces.com/problemset/problem/1343/B

 

Problem - 1343B - Codeforces

 

codeforces.com

난이도 : B

유형 : 구성적, 수학


문제 풀이

배열의 반절로 나눴을 때 왼쪽은 짝수집합, 오른쪽은 홀수집합이어야 하고 양 쪽의 집합의 합은 서로 같아야 한다.

홀수의 합이 짝수의 합과 같기 위해서는 홀수의 개수가 짝수이여햐 하기 때문에 배열 길이의 반절이 짝수여야 한다.


코드

import java.io.BufferedReader
import java.io.InputStreamReader


fun solution() = with(BufferedReader(InputStreamReader(System.`in`))) {
    var sb = StringBuilder()
    var t = readLine().toInt()

    while (t-- > 0) {
        var n = readLine().toInt()

        if ((n / 2) % 2 == 1) {
            sb.append("NO").append('\n')
            continue
        }

        sb.append("YES").append('\n')

        var evenSum = 0
        for (i in 1..n / 2) {
            evenSum += i * 2
            sb.append(i * 2).append(" ")
        }

        for (i in 0 until n / 2 - 1) {
            evenSum -= (i * 2 + 1)
            sb.append(i * 2 + 1).append(" ")
        }
        sb.append(evenSum).append('\n')
    }

    print(sb)
}

fun main() {
    solution()
}