trang chủ / bài tập / xorquery

Truy Vấn XOR

Đề bài

Mô tả

Ban giám khảo giấu một hoán vị p của các số nguyên từ 0 đến n1. Bạn chỉ biết độ dài n.

Gọi b là hoán vị nghịch đảo của p, tức là pbi=i với mọi i.

Thao tác duy nhất bạn được phép làm là chọn hai chỉ số ij (không nhất thiết khác nhau) và hỏi giá trị pibj, trong đó là phép XOR theo bit.

Có thể có những hoán vị không phân biệt được với hoán vị ẩn, ngay cả khi bạn hỏi hết cả n2 truy vấn. Cụ thể, một hoán vị q với nghịch đảo d được gọi là không phân biệt được với p nếu

qidj=pibjvới mọi cặp (i,j).

Nhiệm vụ của bạn là đếm số hoán vị không phân biệt được với hoán vị ẩn (tính cả chính nó) và in ra một hoán vị bất kỳ trong số đó, sử dụng không quá 2n truy vấn.

Hoán vị ẩn được cố định từ trước và không phụ thuộc vào các truy vấn của bạn.

Giao thức tương tác

Đây là bài toán tương tác. Chương trình của bạn giao tiếp với hệ thống chấm qua đầu vào/ra chuẩn.

Đầu tiên, chương trình đọc số nguyên n.

Sau đó bạn có thể thực hiện hai loại thao tác:

  • ? i j (với 0i,jn1): Hỏi giá trị pibj. Hệ thống trả về một số nguyên duy nhất là giá trị đó.
  • Kết thúc: in ra ba dòng

    • dòng đầu chứa ký tự !,
    • dòng thứ hai chứa số nguyên k là số hoán vị không phân biệt được với hoán vị ẩn,
    • dòng thứ ba chứa n số nguyên q0,q1,,qn1 là một hoán vị không phân biệt được với hoán vị ẩn.

    Sau khi in đáp án, chương trình phải kết thúc ngay. Việc in đáp án không tính là một truy vấn.

Bạn được phép hỏi tối đa 2n truy vấn dạng ?. Nếu vượt quá giới hạn này, bài làm bị đánh giá là sai.

Quan trọng: Sau mỗi lần in ra, bạn phải flush output:

  • C++: cout << endl; hoặc cout.flush();
  • Python: print(..., flush=True)

Ràng buộc

  • 1n5000
  • Số truy vấn tối đa: 2n

Ví dụ

Chương trình Hệ thống Giải thích
3 Hệ thống cho biết n=3. Hoán vị ẩn là p=[0,1,2], nên b=[0,1,2]
? 0 0 0 p0b0=00=0
? 1 1 0 p1b1=11=0
? 1 2 3 p1b2=12=3
? 0 2 2 p0b2=02=2
? 2 1 3 p2b1=21=3
? 2 0 2 p2b0=20=2
!
1
0 1 2
Không có hoán vị nào khác cho cùng bộ câu trả lời, nên k=1
Chương trình Hệ thống Giải thích
4 Hệ thống cho biết n=4. Hoán vị ẩn là p=[3,1,2,0], nên b=[3,1,2,0]
? 0 1 2 p0b1=31=2
? 1 2 3 p1b2=12=3
? 2 3 2 p2b3=20=2
? 3 3 0 p3b3=00=0
? 3 2 2 p3b2=02=2
? 2 1 3 p2b1=21=3
? 1 0 2 p1b0=13=2
? 0 0 0 p0b0=33=0
!
2
3 1 2 0
Hoán vị [0,2,1,3] cho cùng kết quả với cả 16 truy vấn, nên k=2. In ra hoán vị nào trong hai hoán vị đó cũng được

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0