QOJ.ac

QOJ

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

#8495. 老虎

الإحصائيات

在自然保护区中生活着 $q$ 只老虎。为了追踪老虎在保护区内的位置,我们使用带有无线电发射器的项圈。每只老虎的项圈都有一个发射唯一信号的无线电发射器。探测系统被设置为依次接收从第 $i$ 只老虎($i$ 从 $1$ 到 $q$)发出的无线电信号。

为了接收信号,保护区内安装了 $n$ 个接收器,坐标分别为 $(x_1, y_1), \dots, (x_n, y_n)$。探测系统允许工作人员在一次查询中选择任意 $m$ ($3 \le m \le n$) 个接收器。所选的接收器必须构成一个凸多边形的顶点。系统会判断第 $i$ 只老虎的无线电发射器是否位于该多边形内部。

保护区工作人员需要定位每只老虎的位置。如果能够确定一组作为凸多边形顶点的接收器,使得老虎位于该多边形内部,且多边形内部没有其他接收器,则认为第 $i$ 只老虎的位置已被定位。

为了定位每只老虎的位置,工作人员最多被允许进行 $k$ 次查询。

在第 $i$ 只老虎的位置被定位后,系统会自动切换到接收下一只老虎的信号,直到所有 $q$ 只老虎的位置都被定位。

保证没有任何三个接收器共线,也没有任何老虎位于经过两个接收器的直线上。保证至少存在一个以接收器为顶点的凸多边形,其内部包含一只老虎。

你需要编写一个与评测程序交互的程序,以定位每只老虎的位置。

交互协议

这是一道交互题。

首先,输入关于保护区内安装的接收器信息和老虎数量。

输入的第一行包含一个整数 $n$ —— 接收器的数量 ($3 \le n \le 5000$)。接下来的 $n$ 行描述接收器的坐标,其中第 $j$ 行包含两个整数 $x_j$ 和 $y_j$ —— 第 $j$ 个接收器的坐标 ($-10^9 \le x_j, y_j \le 10^9$)。下一行包含一个整数 $q$ —— 老虎的数量 ($1 \le q \le 2000$)。

为了定位老虎的位置,需要向探测系统(由评测程序扮演)执行查询。

对于每个测试点,固定了一个数值 $k$ —— 定位一只老虎位置的最大查询次数。保证 $k$ 次查询足以解决相应数据下的问题。该数值不会告知解题程序,但不同子任务的限制在评分系统中给出。如果解题程序为确定某只老虎的位置进行了超过 $k$ 次查询,则该测试点将获得“答案错误”的结果。

对探测系统的查询以字符 ? 开头,后跟一个整数 $m$ —— 查询中选择的接收器数量 ($3 \le m \le n$),以及 $m$ 个不同的整数 $p_i$ —— 接收器的编号,按顺时针或逆时针顺序排列 ($1 \le p_i \le n$)。

作为响应,程序会收到字符串 Yes(如果老虎位于由编号为 $p_1, \dots, p_m$ 的接收器构成的多边形内部)或字符串 No(否则)。

在老虎的位置被定位后,解题程序必须输出一行,以字符 ! 开头,后跟一个整数 $m$ —— 选择的接收器数量 ($3 \le m \le n$),以及 $m$ 个不同的整数 $p_i$ —— 接收器的编号,按顺时针或逆时针顺序排列 ($1 \le p_i \le n$)。这一行意味着老虎位于由编号为 $p_1, \dots, p_m$ 的接收器构成的凸多边形内部,且内部没有其他接收器。

评测程序不会给出响应,解题程序应立即开始寻找下一只老虎。在定位了第 $q$ 只老虎的位置后,解题程序应终止运行。

老虎在探测系统工作期间不会移动。每组测试中老虎的坐标是固定的,在测试过程中不会改变。

如果存在多个合法的多边形可以定位老虎的位置,输出其中任意一个即可。

上图展示了示例中每只老虎的定位过程。

样例

输入格式 1

6
3 0
0 2
2 4
4 2
5 5
6 1
4
Yes
No
Yes
No
No
Yes
Yes

输出格式 1

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

说明

上述示例展示了程序与评测程序之间的“逐步”交互过程。在实际测试中,不会输入多余的空行,也不需要输出多余的空行。

子任务

子任务 分值 $n$ $q$ $k$ 依赖子任务 结果
1 15 $3 \le n \le 6$ $1 \le q \le 50$ $k = 4000$ Потестовые
2 17 $3 \le n \le 20$ $1 \le q \le 50$ $k = 4000$ 1 Потестовые
3 9 $3 \le n \le 60$ $1 \le q \le 400$ $k = 4000$ 1, 2 Потестовые
4 9 $3 \le n \le 300$ $1 \le q \le 1000$ $k = 600$ 1–3 Потестовые
5 10 $3 \le n \le 5000$ $1 \le q \le 10$ $k = 10\,000$ Потестовые
6 10 $3 \le n \le 300$ $1 \le q \le 1000$ $k = 250$ 1–4 Потестовые
7 10 $3 \le n \le 1000$ $1 \le q \le 1000$ $k = 200$ 1–4, 6 Потестовые
8 10 $3 \le n \le 1000$ $1 \le q \le 2000$ $k = 60$ 1–4, 6, 7 Потестовые
9 10 $3 \le n \le 2500$ $1 \le q \le 2000$ $k = 40$ 1–4, 6–8 Потестовые

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.