Universal Cup Judging System

Universal Cup

実行時間制限: 1.0 s メモリ制限: 256 MB 満点: 100 インタラクティブ
統計

이 문제는 인터랙티브 문제입니다. 각 줄을 출력한 후에는 반드시 출력 버퍼를 비워야(flush) 합니다. C++에서는 cout << flush, Java에서는 System.out.flush(), Python에서는 sys.stdout.flush()를 사용할 수 있습니다. 상호작용 섹션의 지침을 엄격히 따라야 하며, 그렇지 않으면 오답(Wrong Answer), 시간 초과(Time Limit Exceeded) 등의 판정을 받을 수 있습니다.

모든 문제들이 신화 속 드워프를 주인공으로 삼고 있으니, 이제는 실질적인 무언가에 대해 생각해 볼 가치가 있을 것입니다.

$[0, 2^N - 1]$ 범위의 정수로 이루어진 길이 $N$의 숨겨진 수열 $A$가 있습니다. 당신의 과제는 제한된 횟수의 질의를 사용하여 이 수열을 복원하는 것입니다. 각 질의마다 $[0, 2^N - 1]$ 범위의 원소를 갖는 길이 $N$의 수열 $B$를 제시합니다. 응답은 다음과 같이 계산됩니다:

  • 수열 $C$가 생성되며, $C$의 $i$번째 원소는 $A$와 $B$의 $i$번째 원소의 비트 XOR(배타적 논리합)입니다. XOR 연산은 $\oplus$로 표기합니다.
  • 집합 $S$는 $C$의 원소들의 부분집합을 XOR하여 얻을 수 있는 모든 값들의 집합으로 구성됩니다. 특히, 공집합에 대한 XOR 값은 $0$입니다.
  • 질의에 대한 답은 $|S|$입니다.

예를 들어, $A = (1, 4, 3)$이고 $B = (0, 4, 7)$이면, $C = (1 \oplus 0, 4 \oplus 4, 3 \oplus 7) = (1, 0, 4)$이고 $S = \{0, 1, 4, 5\}$이므로 답은 $4$입니다.

두 수 $x$와 $y$의 비트 XOR은 $x$와 $y$ 중 정확히 하나의 수에서만 비트 $i$가 켜져 있을 때 그리고 그때에만 비트 $i$가 켜집니다. 예를 들어, $5 \oplus 3 = (101)_2 \oplus (011)_2 = (110)_2 = 6$입니다. C++와 Python에서 XOR 연산자는 ^입니다.

상호작용

수열 $A$는 처음에 고정되어 있으며 수행하는 질의에 따라 변하지 않습니다.

먼저 하나의 정수 $1 \le N \le 60$이 포함된 한 줄을 읽습니다. 그런 다음 질의를 할 수 있습니다.

질의를 하려면 ? 뒤에 $[0, 2^N - 1]$ 범위의 정수 $N$개를 공백으로 구분하여 한 줄에 출력합니다. 그에 대한 응답으로 답이 되는 정수 하나를 읽습니다.

준비가 되면 ! 뒤에 숨겨진 수열의 정수 $N$개를 출력합니다. 그런 다음 프로그램은 추가 출력 없이 종료되어야 합니다.

각 질의 후와 정답을 출력한 후에는 반드시 출력을 비워야(flush) 합니다. 숫자와 ?, ! 기호 사이에는 공백을 두어야 합니다.

예제

예제 입력 1

3
4
8

예제 출력 1

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

노트

예제 상호작용에 대한 설명: $N = 3$ 질의 ? 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\}$, 답은 $4$입니다. 질의 ? 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\}$, 답은 $8$입니다. 출력 ! 1 3 4: 숨겨진 수열은 $A = (1, 3, 4)$입니다.

로컬 테스트

Files 섹션에서 예제 테스트와 채점기 grader.cpp가 포함된 B.zip을 찾을 수 있습니다. 솔루션을 테스트하려면 컴파일한 후 컴파일된 ./grader에 테스트 이름과 실행 파일을 전달하세요:

./grader [test] [executable]

예시: ./grader 0b.in ./abc

예제 채점기는 공식 채점기와 완전히 동일하게 동작한다고 보장되지 않습니다. 그러나 둘 다 적응형(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.