본문 바로가기

코드포스

[Codeforces Round #817 (Div. 4)] G. Even-Odd XOR

 

 


 

 

※. 배열 원소들은 겹치지 않는다.

 

※. 1부터 시작했을 때 n이 홀수라면 (n = 7)

       홀수idx  1 3 5 7

       짝수idx  2 4 6

※. n이 짝수라면(n = 8)

      홀수idx  1 3 5 7

      짝수idx  2 4 6 8

 

※. 서로 다른 a,b를 xor했을 때 같게 만드는 방법은 (xor ⊕)

a ⊕ ((2 ^ n) + a) ⊕ ((2 ^ n) + (2 ^ n-1)) = 2 ^ n - 1

b ⊕ ((2 ^ n-1) + b) = 2 ^ n-1

 

※. n, n-1, n-2 3개의 원소를 제외하고 n-3개의 수를 출력한다.(2^n-1 보다 작아야함)

     제외한 3개의 원소를 위와 같이 넣는다.

 


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
//4
public class Main {
 	public static void main(String arg[]) throws IOException {
 		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		while(T --> 0) {
			int n = Integer.parseInt(br.readLine());
			int case1 = 0;
			int case2 = 0;
				for(int i = 1; i < n-2; i++) {
					sb.append(i+" ");
					if(i%2 == 0) {
						case1 ^= i;
					}
					else
						case2 ^= i;
				}
			if(n % 2 == 0) {
				int case3 = (1 << 30);
				int case4 = (1 << 29);
				sb.append((case3+case1)+" ");
				sb.append((case4+case2)+" ");
				sb.append((case3+(1<<29))+"\n");
			}
			else {
				int case3 = (1 << 30);
				int case4 = (1 << 29);
				sb.append((case3+case2)+" ");
				sb.append((case4+case1)+" ");
				sb.append((case3+(1<<29))+"\n");
			}
		}
		System.out.println(sb);
 	}
}