오늘의 문제!
import java.io.*;
public class blobblush_24500 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
long n = Long.parseLong(br.readLine());
long temp = n;
long length = 0;
while (temp > 0) {
temp = temp >> 1;
length++;
}
long maxN = (1L << length) - 1;
if (n == maxN) {
bw.write("1\n");
bw.write(n + "");
} else {
bw.write("2\n");
bw.write((maxN - n) + "\n");
bw.write(n + "");
}
bw.flush();
bw.close();
}
}
xor을 해서 최대가 되는 수들을 구하면 되는 문제.
자릿수에 따라 알아서 1로 가득차는 애들(1, 11, 111, 1111 ...)은 1개. 자기자신을 출력하고
그게 아니라면 0인 자릿수만 1로 채워주면 되니까 채워주는 수까지 최대 2개면 충분하다.
그 채워주는 수 구하는법은 어차피 2개 더해서 최댓값인 1111...를 만드는거니까 최댓값에서 주어진 N을 빼는 방식으로 가면 된다. 굿!