※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 11391번 문제인 분배이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/11391 

 

0부터 2N1까지의 정수를 비트 수와 크기가 같은 2K개의 집합으로 분할하는 문제이다.

 

0 이상 2N1 이하의 이진수 x에 대하여 x2N1x2N보다 낮은 각 자리에 대하여 대응되는 모든 비트의 상태가 서로 다름을 관찰하자. 따라서 모든 x2N1x의 쌍은 같은 개수(N개)의 비트를 포함하게 된다.

 

주어지는 NK의 값은 다름이 보장되므로, x2N1x의 쌍들을 같은 개수로 분배해 2K개의 집합을 구성하면 문제의 답 중 하나를 구성할 수 있다. 이를 출력해 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N, M, K;
int val;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> M;
	N = (1 << N), M = (1 << M);
	K = N / M;
	for (int m = 0; m < M; m++) {
		for (int k = 0; k < K; k += 2) {
			cout << val << ' ' << N - val - 1 << ' ';
			val++;
		}
		cout << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 16400 // C++] 소수 화폐  (0) 2024.05.10
[BOJ 19949 // C++] 영재의 시험  (0) 2024.05.09
[BOJ 15553 // C++] 난로  (0) 2024.05.07
[BOJ 25917 // C++] Prime Arrangement  (0) 2024.05.06
[BOJ 18231 // C++] 파괴된 도시  (0) 2024.05.05

+ Recent posts