QOJ.ac

QOJ

حد الوقت: 2 s حد الذاكرة: 256 MB مجموع النقاط: 100 تفاعلية

#7834. 公平竞争

الإحصائيات

这是一个交互式问题。

有些比赛中,你可以获得排名表的第一行并获得第 0 名的奖状,而其下方的队伍获得第 1 名的奖杯。

让我们推广这种情况。假设有 $n$ 名选手参加了比赛,没有并列名次,且选手的名次是连续的整数。比赛有第 1、第 2 和第 3 名,但排名表的第一行对应的名次可能小于第 1 名。假设比赛已经结束,你需要找出每个人的最终名次。你可以询问选手他们相对于其他选手的名次。然而,选手并不总是会回答你的问题。这取决于你询问的对象是谁,具体规则如下:

  • 名次高于第 1 名的选手只会回答关于那些名次在他之后的人的问题;
  • 获得第 1 名的选手不会回答关于任何人的问题;
  • 获得第 2 名的选手只能回答他表现得比第 3 名好,不会回答关于其他人的问题;
  • 获得第 3 名的选手只会回答关于那些名次在他之后的人的问题;
  • 名次低于第 3 名的选手只会回答关于那些名次在他之前的人的问题。

请确定所有选手的名次。

交互

首先,评测程序会打印一行,包含一个整数 $n$ ($3 \le n \le 1000$)。保证比赛存在第 1、第 2 和第 3 名,但排名表的第一行对应的名次可能小于第 1 名。为了进行询问,选手被编号为 $1$ 到 $n$,编号顺序与他们的名次无关。

之后,选手程序必须通过打印以下格式的命令与评测程序进行交互:

  • ? a b:询问编号为 $a$ 的选手,他的名次与编号为 $b$ 的选手的名次相比如何。作为回应,评测程序将输出 +(如果编号为 $a$ 的选手表示他表现得比编号为 $b$ 的选手好)、-(如果他表示表现得比编号为 $b$ 的选手差),或者 ?(如果他决定不回答)。
  • ! ans:问题的答案。其中 ans 是一个整数序列,表示编号从 $1$ 到 $n$ 的选手所获得的名次。打印此命令后,程序应立即终止。

样例

输入格式 1

6
?
?
?
+
?
?
?
?
+
?
?
+
-
-

输出格式 1

? 6 5
? 6 4
? 5 6
? 5 4
? 5 1
? 5 3
? 4 5
? 4 6
? 4 3
? 4 2
? 1 2
? 2 1
? 3 4
? 3 1
! 0 -1 4 3 2 1

说明

对于本题的每个测试用例,所有选手的名次都是预先固定好的,且不会以任何方式受到你查询的影响。

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.