fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 34406 (C++) x와 배수와 XOR (Easy)
최초 업로드: 2025-10-28 05:51:27
최근 수정 시간: 2025-10-28 05:51:27
게시자: rlatjwls3333
카테고리: 백준
조회수: 11
# [Gold V] x와 배수와 XOR (Easy) [문제 링크](https://www.acmicpc.net/problem/34406) ## 문제 설명 <blockquote> <p>이 문제는 <strong>굵은 글씨로 적힌 출력 조건</strong>을 제외하면 <a href="/problem/34407">x와 배수와 XOR (Hard)</a>와 동일한 문제이다.</p> </blockquote> <p><a href="https://pimm-dev.github.io/">전남대학교 게임개발동아리 PIMM</a>에 놀러 온 지훈은 동아리 사람들이 수상하게 XOR을 좋아한다는 사실을 깨닫고, $x$의 배수들을 적절히 XOR해서 다시 $x$를 만드는 게임을 고안하였다.</p> <p>지훈이 만든 게임을 플레이하기 위해서는 음이 아닌 정수 $x$가 주어졌을 때, 다음 조건들을 모두 만족하는 정수 배열 $[k_1,\cdots,k_n]$을 찾아서 출력해야 한다.</p> <ul> <li>$n$은 $1$ 이상의 정수이다.</li> <li>각 $k_i$는 정수이며, $1 \lt k_i \lt 2^{31}$이다.</li> <li>$(k_1\times x) \oplus \cdots \oplus (k_n \times x)=x$가 성립한다.</li> </ul> <p>게임을 다 만든 지훈은 컴퓨터가 채점을 할 때 매우 비싼 연산인 곱셈 연산을 $n$번이나 수행해야 한다는 사실을 깨닫고, 채점을 해야 하는 컴퓨터의 입장을 고려하여 다음과 같은 조건을 추가하였다.</p> <ul> <li>조건을 만족하는 배열 중에서 원소의 개수 $n$이 최소인 배열을 찾고, 그 배열을 출력하라. 조건을 만족하는 배열이 여러 개라면, 그중 <strong>아무거나 </strong>출력해도 된다.</li> </ul> <p>지훈이 만든 게임을 플레이해 보자.</p> ## 입력 <p>첫 번째 줄에 테스트 케이스의 개수 $T$가 주어진다.</p> <p>두 번째 줄부터 $T$개의 줄에 걸쳐 각 테스트 케이스마다 한 줄에 정수 $x$가 주어진다.</p> ## 출력 <p>각 테스트 케이스마다 아래와 같이 두 줄로 구성된 답안을 출력한다.</p> <p>첫 번째 줄에 조건을 만족하는 배열의 원소 개수 $n$을 출력한다.</p> <p>두 번째 줄에 해당 배열의 원소 $k_1,\cdots,k_n$을 공백으로 구분하여 출력한다. 조건을 만족하는 배열이 여러 개라면, 그중 <strong>아무거나</strong> 출력해도 된다. 조건을 만족하는 배열이 반드시 존재하는 입력만 주어진다.</p> ## 풀이 x에 들어온 비트수만큼 왼쪽 쉬프트한 값과, 그 값에 x만큼 더한 값을 xor 하면 x가 나옵니다. 그래서 2^30과 2^30+1을 출력하면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) { int x; cin >> x; if(!x) cout << "1\n2\n"; else cout << "2\n" << (1<<30) << ' ' << (1<<30)+1 << '\n'; } } ```