「CEOI2018」三角形
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
[AdditionalFile3201.zip](file://AdditionalFile3201.zip?type=additional_file)
#3201. 「CEOI2018」三角形
标签: 交互 | 时间限制: 1000 ms | 内存限制: 256 MiB |
题目描述
译自 CEOI2018 Day2 T3. Triangles
Byteland 是一个有着 个城市的美好国家,它可以用 个二维平面上不同的点来表示。城市编号为 到 。作为一个有课,你不知道 Byteland 中城市的确切位置。从一本旅游杂志上你知道了没有任意三个城市共线。
个点的点集的凸包是一个面积最小的凸多边形,满足所有 个点都在这个多边形的内部或边界上。一个凸多边形的内角均小于 度,并且不自交。
你的任务是找到 Byteland 的城市所构成的凸包边界上有多少个点。你只能询问由三个不同的整数构成的一些三元组 。这样的问题有关于由城市 所组成的三角形。这个问题的答案是如果按 的顺序遍历这个三角形,是顺时针顺序还是逆时针顺序。
交互过程
在 LibreOJ 上,本题只支持 C++ 语言的提交。
你的程序应该使用提供的库实现主函数。库(为 C++ 语言提供的是 trilib.h)提供了如下函数:
int get_n();
返回城市个数。bool is_clockwise(int a, int b, int c);
如果三个点 以顺时针顺序给出,则返回true,如果以逆时针顺序给出,则返回false。void give_answer(int s);
在你的程序调用 give_answer 后,就不允许再调用任何询问函数了。你只能调用 give_answer 函数恰好一次。
本题中,你不允许从标准读入中读取输入,或输出到标准输出中。在调用 give_answer 后,你的程序应立刻停止。
你可以假设点的位置是提前确定的,并且在程序运行中不会改变(换句话说,库的行为是确定的)。例如,在样例中(见下)调用 give_answer(4) 并立即结束是可以通过这组数据的。你的程序允许在确定答案之前猜测答案。
样例交互
考虑 个城市,位置分别在 ,如下图所示。凸包已经用线标识出来了。在边界上包含 个点,所以答案是 。

下表展示了一个对于样例的样例交互过程。
| 调用 | 返回值 |
|---|---|
get_n() |
|
is_clockwise(1, 4, 2) |
true |
is_clockwise(4, 2, 1) |
true |
is_clockwise(1, 2, 4) |
false |
is_clockwise(3, 6, 5) |
true |
give_answer(4) |
- |
下图展示了第一个询问中的三角形。城市 是按顺时针顺序给出的,所以返回 true。

数据范围与提示
对于所有测试数据,,你可以调用 is_clockwise 函数最多 次。
| 子任务编号 | 附加限制 | 分值 |
|---|---|---|
| 最多一个点不在凸包的边界上 | ||
| 无附加限制 |
入门提高测试:入门+提高-难度(时间3h)0828
- 状态
- 已结束
- 规则
- XCPC
- 题目
- 8
- 开始于
- 2024-8-28 8:30
- 结束于
- 2024-8-28 11:50
- 持续时间
- 3.3 小时
- 主持人
- 参赛人数
- 0