카테고리 없음
[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()
}