canuc80k2928·29/50

Cân Bằng XOR Theo Vị Trí

Nộp bài trên LQDOJ

Bài 2.10 · Constructive Algorithms

Cho số nguyên . Hãy tạo một mảng gồm các số nguyên không âm đôi một khác nhau, mỗi số nhỏ hơn , sao cho

Hai vế lần lượt lấy các phần tử ở vị trí lẻ và vị trí chẵn. Có thể in bất kỳ mảng nào thỏa điều kiện.

Input

  • Dòng đầu chứa số nguyên - số bộ test.
  • Mỗi bộ test gồm một dòng chứa số nguyên .

Output

  • Với mỗi bộ test, in một dòng gồm số nguyên tạo thành một mảng hợp lệ.

Constraints

  • .
  • .
  • Tổng qua mọi bộ test không vượt quá .
  • Mọi số được in phải thuộc và đôi một khác nhau trong cùng bộ test.

Scoring

  • Subtask ( số điểm): và tổng .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3
3
4
6

Output

1048576 2097152 3145728
1 1048576 2097152 3145729
1 2 3 1048576 2097152 3145728

Giải thích: XOR của toàn bộ mỗi dòng đều bằng ; do đó XOR ở vị trí lẻ bằng XOR ở vị trí chẵn. Chẳng hạn ở dòng cuối, bằng .

Lời giải tóm tắt
  • Ý tưởng: Đẳng thức giữa XOR ở vị trí lẻ và vị trí chẵn tương đương XOR của toàn bộ mảng bằng 0.
  • Ý tưởng: In trước các số 1,2,...,n-3 và gọi XOR của chúng là X. Chọn
  • Ý tưởng: A=2^20, B=2^21, C=X xor A xor B.
  • Ý tưởng: Khi đó XOR toàn mảng là X xor A xor B xor C=0.
  • Ý tưởng: Vì n≤2·10^5<2^18, các số đầu không có bit 20 hoặc 21. A và B khác nhau; C có cả hai bit cao này bằng 1, nên khác A, khác B và khác mọi số nhỏ. Tất cả các số đều nhỏ hơn 2^31.
  • Ý tưởng: Thuật toán chạy trong O(n) thời gian và dùng O(n) bộ nhớ cho output.