QOJ.ac

QOJ

時間限制: 5 s 記憶體限制: 512 MB 總分: 100 互動

#1813. Niềm vui với hoán vị

统计

Đây là một bài toán tương tác.

Alice bí mật tạo ra một hoán vị của $N$ số nguyên đầu tiên $a_1, a_2, \dots, a_N$ và cho Bob biết $N$. Bob đặt các câu hỏi để xác định hoán vị này. Anh ấy có thể đặt câu hỏi thuộc hai loại:

  • Loại 1, có định dạng “? 1 i j k”: Bob chọn ba số nguyên khác nhau $i, j, k$ ($1 \le i, j, k \le N$), Alice xem xét ba giá trị $a_i, a_j$ và $a_k$, rồi trả lời cho Bob giá trị trung vị của chúng (giá trị không phải là nhỏ nhất cũng không phải là lớn nhất).
  • Loại 2, có định dạng “? 2 i j”: Bob chọn hai số nguyên khác nhau $i, j$ ($1 \le i, j \le N$), và Alice trả lời $i$ nếu $a_i < a_j$, hoặc $j$ nếu ngược lại.

Trò chơi có vẻ quá dễ dàng đối với Bob, vì vậy Alice đã đặt ra các quy tắc mới. Thứ nhất, Bob chỉ được phép hỏi tối đa $2N$ câu hỏi loại 1 và chỉ 2 câu hỏi loại 2. Thứ hai, Alice có thể thay đổi hoán vị một cách tự do miễn là nó nhất quán với tất cả các câu trả lời đã đưa ra trước đó.

Hãy giúp Bob chiến thắng và viết chương trình xác định hoán vị đó.

Giao tiếp

Đầu tiên, chương trình giám khảo sẽ cho bạn biết một số nguyên $N$ trên một dòng riêng biệt ($4 \le N \le 60\,000$).

Sau đó, bạn có thể đặt câu hỏi.

Một câu hỏi loại 1 là một dòng có định dạng “? 1 i j k” ($1 \le i, j, k \le N$; $i, j$ và $k$ đôi một khác nhau). Chương trình giám khảo sau đó sẽ in ra một dòng với một số nguyên duy nhất: giá trị trung vị của $a_i, a_j$ và $a_k$. Bạn không được hỏi loại câu hỏi này quá $2N$ lần.

Một câu hỏi loại 2 là một dòng có định dạng “? 2 i j” ($1 \le i, j \le N$; $i \neq j$). Chương trình giám khảo sau đó sẽ in ra một dòng với một số nguyên duy nhất: $i$ nếu $a_i < a_j$, hoặc $j$ nếu $a_i > a_j$. Bạn không được hỏi loại câu hỏi này quá hai lần.

Khi hoán vị đã được xác định duy nhất, hãy in câu trả lời trên một dòng có định dạng “! a1 a2 ... aN ”.

Lưu ý rằng tương tác mang tính thích nghi: chương trình giám khảo có thể thay đổi hoán vị bất cứ lúc nào miễn là nó nhất quán với các câu trả lời trước đó. Đặc biệt, nếu bạn cố gắng đoán câu trả lời khi nó chưa được xác định duy nhất, chương trình giám khảo có thể ngay lập tức chọn một hoán vị khác và thông báo rằng bạn đã sai.

Đừng quên in ký tự xuống dòng và xóa bộ đệm đầu ra (flush) sau khi in một câu hỏi hoặc câu trả lời, nếu không, bạn có thể gặp lỗi “Idleness Limit Exceeded”.

Ví dụ

Dữ liệu vào 1

5
4
4
2

Dữ liệu ra 1

? 1 1 2 3
? 2 2 4
? 1 1 5 4
! 3 5 4 1 2

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.