Universal Cup Judging System

Universal Cup

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

משימה זו היא אינטראקטיבית. לאחר הדפסת כל שורה, עליך לרוקן את חוצץ הפלט (flush). ניתן להשתמש ב-cout << flush ב-C++, ב-System.out.flush() ב-Java, וב-sys.stdout.flush() ב-Python. עליך לעקוב בקפדנות אחר ההוראות בסעיף האינטראקציה; אחרת אתה עלול לקבל פסקי דין כמו תשובה שגויה (wrong answer), חריגה ממגבלת הזמן (time limit exceeded) או אחרים.

מכיוון שבכל המשימות הדמויות הראשיות הן גמדים מיתולוגיים, אולי כדאי סוף סוף לחשוב על משהו מוחשי.

קיימת סדרה נסתרת $A$ באורך $N$ המורכבת ממספרים שלמים בטווח $[0, 2^N - 1]$. משימתך היא לשחזר אותה באמצעות מספר מוגבל של שאילתות. בכל שאילתה, אתה מספק סדרה $B$ באורך $N$ עם איברים בטווח $[0, 2^N - 1]$. התגובה מחושבת באופן הבא:

  • נוצרת סדרה $C$ שבה האיבר ה-$i$ של $C$ הוא ה-xor הסיביתי (bitwise xor) של האיברים ה-$i$ של $A$ ו-$B$. אנו מסמנים xor באמצעות $\oplus$.
  • הקבוצה $S$ נבנית כקבוצת כל הערכים שניתן לקבל על ידי הפעלת xor על תת-קבוצה כלשהי של איברי $C$. בפרט, עבור תת-הקבוצה הריקה, ה-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$.

ב-xor הסיביתי של שני מספרים $x$ ו-$y$, הסיבית ה-$i$ דלוקה אם ורק אם בדיוק לאחד מבין $x$ ו-$y$ יש סיבית $i$ דלוקה. לדוגמה, $5 \oplus 3 = (101)_2 \oplus (011)_2 = (110)_2 = 6$. ב-C++ וב-Python, אופרטור ה-xor הוא ^.

אינטראקציה

הסדרה $A$ קבועה מראש ואינה תלויה בשאילתות המבוצעות.

תחילה, קרא שורה המכילה מספר שלם אחד $1 \le N \le 60$. לאחר מכן תוכל לשאול שאילתות.

כדי לשאול שאילתה, הדפס שורה המכילה ? ואחריו $N$ מספרים שלמים בטווח $[0, 2^N - 1]$. בתגובה, קרא מספר שלם אחד שהוא התשובה.

כאשר תהיה מוכן, הדפס ! ואחריו $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 תוכל למצוא את B.zip המכיל מבחני דוגמה ובודק grader.cpp. כדי לבדוק את הפתרון שלך, קמפל אותו, ולאחר מכן העבר את שם המבחן ואת קובץ ההרצה שלך אל ה-./grader המקומפל:

./grader [test] [executable]

לדוגמה: ./grader 0b.in ./abc

לא מובטח שהבודק לדוגמה יתנהג באופן זהה לבודק הרשמי. עם זאת, אף אחד מהם אינו אדפטיבי.

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.