本题目前可以评测子问题 2。可在 P13536 评测子问题 1。
东科迪勒拉山脉是安第斯山脉跨越玻利维亚的部分。它由连续的 座山峰组成,从 到 编号。山峰 ()的高度 是 到 之间的整数。
对任意两座山峰 和 (其中 ),它们的距离定义为 。根据古老的印加传说,三座山峰是神话三峰的条件是:它们的高度与两两之间的距离在忽略顺序后匹配。
形式化地, 是神话三峰的条件为:
- ,
- 山峰高度 与两两之间的距离 在忽略顺序后匹配。例如,对山峰 ,其两两之间的距离是 ,所以山峰高度 , 和 都匹配,但山峰高度 则不匹配。
该问题分为两个部分,分别对应子问题一或者子问题二。你可以按任意顺序解决这些子问题。特别地,你无需先完成子问题一再尝试子问题二。
子问题一
给定山脉的描述,你的任务是计算神话三峰的数量。
实现细节
你要实现以下函数:
long long count_triples(std::vector<int> H)
- : 长度为 的数组,表示每座山峰的高度。
- 对每个测试用例,该函数恰好被调用一次。
该函数返回一个整数 ,表示山脉中神话三峰的数量。
子问题二
你的任务是构造包含尽量多神话三峰的山脉。该子问题包含 个有部分得分的提交答案的子任务。
对每个子任务,你将获得两个正整数 和 ,需要构造一个最多包含 座山峰的山脉。如果你的答案中包含至少 个神话三峰,你将获得该子任务的满分。否则,你的得分将与你的答案中所包含的神话三峰的数量成正比。
注意,你的答案必须是一个有效的山脉。具体来说,假设你的答案包含 座山峰( 必须满足 )。那么,山峰 的高度 ()必须是一个 到 之间的整数。
实现细节
有两种提交解答的方法,你可以为每个子任务选择其中一种:
通过输出文件提交解答时,请创建并提交一个格式如下的文本文件:
通过函数调用提交解答时,你需要实现以下函数。
std::vector<int> construct_range(int M, int K)
- : 最多允许的山峰数量。
- : 期望的神话三峰数量。
- 对每个测试用例,该函数恰好被调用一次。
该函数应返回一个长度为 的数组 ,表示每座山峰的高度。