#P6829. [IOI2020] 植物比较
[IOI2020] 植物比较
题目背景
这是一道交互题。
本题仅支持 C++ 系列语言,提交时不需要包含 plant.h
头文件。
题目描述
植物学家 Hazel 参观过新加坡植物园的一个特别展览。在这次展览中,有 棵 高度互不相同 的植物,它们排成了一个圆。这些植物按顺时针方向从 到 编号,植物 与植物 是相邻的。
对于每棵植物 ),Hazel 将它与顺时针方向的后 棵植物进行比较,记录下数值 以表示这 棵植物中有多少棵的高度大于植物 。因此,每个 的数值是由某段连续 棵植物的相对高度决定的。
例如,假设 ,,。植物 顺时针方向的后 棵植物是植物 和植物 。如果植物 比植物 高,且植物 比植物 矮,那么 Hazel 将会记录 。
你可以假设 Hazel 记录的数值 都是正确的。也就是说,这些植物至少存在一组互不相同的高度符合 Hazel 所记录的数值。
本题要求你比较 对植物的高度。由于你没有机会参观这次展览,你仅有的信息来源是 Hazel 的笔记本,其中记录了 和序列 的值。
对于每对需要比较的植物 和 ( 和 不同),判定它们符合以下哪种情况:
- 植物 一定比植物 高:对于任意一组符合数组 且互不相同的高度 ,都有 。
- 植物 一定比植物 矮:对于任意一组符合数组 且互不相同的高度 ,都有 。
- 该比较没有定论:以上两种情况都不成立。
实现细节
要求你实现以下函数:
void init(int k, std::vector<int> r)
- :决定每个 数值的连续植物的棵数。
- :一个大小为 的数组,其中 是植物 顺时针方向的后 棵植物中比它高的棵数。
- 该函数恰好被调用一次,且在对
compare_plants
的任何调用前。
int compare_plants(int x, int y)
- :待比较的植物的编号。
- 该函数应该返回:
- ,如果植物 一定比植物 高,
- ,如果植物 一定比植物 矮,
- ,如果该比较没有定论。
- 该函数恰好被调用 次。
提示
样例说明
例 1
考虑以下调用:
init(3, [0, 1, 1, 2])
假设评测程序调用了 compare_plants(0, 2)
。由 可以推断植物 不比植物 高,因此该调用应该返回 。
假设评测程序接下来调用了 compare_plants(1, 2)
。由于对每组符合以上条件的植物高度,都有植物 比物 矮,因此该调用应该返回 。
例 2
考虑以下调用:
init(2, [0, 1, 0, 1])
假设评测程序调用了 compare_plants(0, 3)
。由 可以推断植物 比植物 高,因此该调用应该返回 。
假设评测程序接下来调用了 compare_plants(1, 3)
。两组高度 和 都符合 Hazel 的观测记录,由于在第一种情况中植物 比植物 矮,而在第二种情况中它比植物 高,因此该调用应该返回 。
约束条件
- (对所有 )
- 存在一组或多组 互不相同的高度 符合数组 记录的情况
子任务
- (5 分)
- (14 分)
- (13 分)
- (17 分)每次
compare_plants
调用的正确答案是 或 - (11 分)
- (15 分)每次调用
compare_plants
时有 - (25 分)没有附加约束条件
评测程序示例
评测程序示例以如下格式读取输⼊数据:
第 行:
第 行:
第 行:,表⽰第 次调用 compare_plants
时的参数
评测程序示例以如下格式打印你的答案:
第 行:第 次调用 compare_plants
的返回值