Universal Cup Judging System

Universal Cup

时间限制: 1.0 s 内存限制: 256 MB 总分: 100 交互
统计

Đây là bài toán tương tác. Sau khi in mỗi dòng, bạn cần xóa bộ đệm đầu ra (flush). Bạn có thể dùng cout << flush trong C++, System.out.flush() trong Java, và sys.stdout.flush() trong Python. Bạn phải tuân thủ nghiêm ngặt các hướng dẫn trong phần Tương tác; nếu không bạn có thể nhận các kết quả như sai (Wrong Answer), quá thời gian (Time Limit Exceeded) hoặc các lỗi khác.

Vì tất cả các bài toán đều lấy những chú lùn thần thoại làm nhân vật chính, có lẽ cuối cùng cũng đáng để suy nghĩ về một thứ gì đó cụ thể hơn.

Có một dãy ẩn $A$ độ dài $N$ gồm các số nguyên trong đoạn $[0, 2^N - 1]$. Nhiệm vụ của bạn là khôi phục nó bằng một số lượng truy vấn giới hạn. Trong mỗi truy vấn, bạn cung cấp một dãy $B$ độ dài $N$ với các phần tử trong đoạn $[0, 2^N - 1]$. Phản hồi được tính như sau:

  • Dãy $C$ được tạo ra trong đó phần tử thứ $i$ của $C$ là phép xor bit (bitwise xor) của phần tử thứ $i$ của $A$ và $B$. Ta ký hiệu phép xor là $\oplus$.
  • Tập hợp $S$ được xây dựng là tập hợp tất cả các giá trị có thể thu được bằng cách xor một tập con các phần tử nào đó của $C$. Cụ thể, đối với tập con rỗng, tổng xor là $0$.
  • Câu trả lời cho truy vấn là $|S|$.

Ví dụ, nếu $A = (1, 4, 3)$ và $B = (0, 4, 7)$, thì $C = (1 \oplus 0, 4 \oplus 4, 3 \oplus 7) = (1, 0, 4)$ và $S = \{0, 1, 4, 5\}$, vì vậy câu trả lời là $4$.

Phép xor bit của hai số $x$ và $y$ có bit thứ $i$ được bật khi và chỉ khi đúng một trong hai số $x$ và $y$ có bit thứ $i$ được bật. Ví dụ, $5 \oplus 3 = (101)_2 \oplus (011)_2 = (110)_2 = 6$. Trong C++ và Python, phép xor là toán tử ^.

Tương tác

Dãy $A$ được cố định ngay từ đầu và không phụ thuộc vào các truy vấn được thực hiện.

Đầu tiên, đọc một dòng chứa một số nguyên $1 \le N \le 60$. Sau đó bạn có thể đặt các truy vấn.

Để hỏi một truy vấn, hãy in một dòng chứa ? theo sau là $N$ số nguyên trong đoạn $[0, 2^N - 1]$. Đáp lại, hãy đọc một số nguyên là câu trả lời.

Khi đã sẵn sàng, hãy in ! theo sau là $N$ số nguyên của dãy ẩn. Sau đó chương trình của bạn phải thoát mà không in thêm bất kỳ đầu ra nào.

Hãy nhớ flush sau mỗi truy vấn và sau khi in câu trả lời. Đặt dấu cách giữa các số và các ký hiệu ?, !.

Ví dụ

Dữ liệu vào 1

3
4
8

Kết quả 1

? 1 2 3
? 0 0 0
! 1 3 4

Giải thích

Giải thích cho tương tác ví dụ: $N = 3$ Truy vấn ? 1 2 3: $B = (1, 2, 3)$, $C = (1 \oplus 1, 3 \oplus 2, 4 \oplus 3) = (0, 1, 7)$, $S = \{0, 1, 6, 7\}$, câu trả lời là $4$. Truy vấn ? 0 0 0: $B = (0, 0, 0)$, $C = (1 \oplus 0, 3 \oplus 0, 4 \oplus 0) = (1, 3, 4)$, $S = \{0, 1, \dots, 7\}$, câu trả lời là $8$. Đầu ra ! 1 3 4: Dãy ẩn là $A = (1, 3, 4)$.

Kiểm thử cục bộ

Trong phần Files, bạn có thể tìm thấy tệp B.zip chứa các test ví dụ và trình chấm grader.cpp. Để kiểm thử lời giải của bạn, hãy biên dịch nó, sau đó truyền tên test và tệp thực thi của bạn vào ./grader đã biên dịch:

./grader [test] [executable]

Ví dụ: ./grader 0b.in ./abc

Trình chấm ví dụ không được đảm bảo hoạt động giống hệt với trình chấm chính thức. Tuy nhiên, cả hai đều không thích ứng (non-adaptive).

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.