QOJ.ac

QOJ

时间限制: 4 s 内存限制: 1024 MB 总分: 100

#9094. 山羊

统计

在广阔的平原上,散布着 $N$ 只山羊在悠闲地吃草。没有任何两只山羊位于同一个位置。山羊很懒,不会移动位置,偶尔只会在原地转动。事实上,这些山羊都是机器人,无法行走,只能在原地旋转。此外,山羊的鼻子可以通过 LED 等进行远程点亮,山羊的眼睛是高性能摄像头,拍摄的影像可以实时远程确认,并能保存想要的场景。在山羊的眼中可以看到自己的鼻子,并且具有透视功能,即使山羊重叠在一起,也能识别出有几只。此外,眼睛的左右视野角为 $180^\circ$,即使在边界上的物体也能看到。

根据山羊的位置,有的山羊一次能看到 $N$ 只,而根据情况,有的山羊无论看向哪个方向,一次都无法看到 $N$ 只。例如,给定从 $0$ 号到 $5$ 号共六只山羊时,$5$ 号山羊一次可以看到六只,但 $2$ 号山羊无论看向哪个方向,都无法一次看到全部六只。

为了进行一项特殊的实验,我们选择两只一次能看到 $N$ 只的山羊,并从其余所有山羊中随机选择一只。让选定的三只山羊点亮鼻子,以便随时确认它们的位置。观察选定的三只山羊眼中拍摄的影像,并将三只山羊出现在同一画面中的场景分别为每只山羊保存一份。依次查看保存的三个场景,对与点亮的三只山羊以及点亮的另外两只山羊之间(包含边界)的所有山羊进行特殊标记。这个标记是为了特殊实验而设的,本实验的目标是求出在 $N$ 只山羊中,三次都被标记的山羊的数量。

例如,在总共六只山羊中,若选定的三只山羊用红点表示,下图展示了以每只山羊为基准被特殊标记的山羊。(当然,每张图并不是保存的场景本身。)在这种情况下,三次都被标记的山羊数量为 $4$。

你需要实现以下两个函数:

  • void init(int x[], int y[]):该函数在最开始被调用,且仅调用一次。$x$ 和 $y$ 是大小为 $N$ 的数组(vector)。山羊的位置坐标作为参数给出,第 $i$ 只山羊($0 \le i \le N-1$)的位置为 $(x[i], y[i])$。
  • int count(int a, int b, int c):利用给定的三只山羊的坐标 $(x[a], y[a]), (x[b], y[b]), (x[c], y[c])$,计算并返回三次都被标记的山羊数量。

实现细节

你需要提交一个名为 goat.cpp 的文件。该文件中必须实现以下函数:

  • void init(int x[], int y[])
  • int count(int a, int b, int c)

这些函数必须按照上述说明进行操作。当然,你可以创建其他函数并在内部使用。提交的代码不得执行输入输出操作或访问其他文件。

输入格式

提供的 grader 按以下格式读取输入:

  • 第 1 行:$N \ Q$($N$:山羊的数量,$Q$:查询的次数)
  • 接下来的 $N$ 行:$x \ y$(山羊位置的 $x$ 坐标和 $y$ 坐标)
  • 接下来的 $Q$ 行:$a \ b \ c$(三只山羊的编号,$0 \le a, b, c \le N-1$)

提供的 grader 会针对每次查询输出满足条件的山羊数量,并以换行符分隔。

数据范围

  • $3 \le N \le 3,000$
  • $1 \le Q \le 5 \times 10^6$
  • 所有山羊的 $x$ 坐标和 $y$ 坐标均在 $0$ 到 $10^9$ 之间

子任务

  • 子任务 1 [5 分]:$N \le 500, Q \le 10^5$,且没有任何三点共线。
  • 子任务 2 [17 分]:$N \le 3,000, Q \le 5 \times 10^6$。
  • 子任务 3 [10 分]:$N \le 500$,且没有任何三点共线。
  • 子任务 4 [8 分]:$N \le 500$。
  • 子任务 5 [29 分]:没有任何三点共线。
  • 子任务 6 [31 分]:无额外限制。

样例

样例输入 1

6 3
0 0
1 1
2 2
4 3
0 2
2 0
0 5 2
1 3 4
4 1 5

样例输出 1

4
4
3

说明

下表展示了针对样例 1 的函数调用及其结果:

函数调用 结果值
init({0, 1, 2, 4, 0, 2}, {0, 1, 2, 3, 2, 0})
count(0, 5, 2) 4
count(1, 3, 4) 4
count(4, 1, 5) 3

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.