#P11590. [KTSC 2022 R2] 安全系统
[KTSC 2022 R2] 安全系统
题目背景
请使用 C++17 或 C++20 提交本题
你需要在程序开头加入如下代码:
题目译自 2022년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T2「 보안 시스템」
题目描述
KOI 国的机密设施可以表示为一个在坐标平面上的正方形,其左下角顶点为 ,右上角顶点为 ,边与坐标轴平行。正方形的每条边代表机密设施的外壁。
在机密设施内有 个激光传感器,每个传感器从 到 编号。我们需要设计一个安全系统,通过这些激光传感器来检测入侵者。
每个激光传感器可以表示为坐标平面上的一个点。当激光传感器启动时,它会向上( 轴方向)、向右( 轴方向)、向下( 轴方向)或向左( 轴方向)发射激光。激光会一直延伸到碰到墙壁为止,因此激光的路径可以表示为从传感器位置到墙壁上的某个点的线段。
激光发射的方向用 到 表示。 表示向上, 表示向右, 表示向下, 表示向左。下图依次展示了激光传感器向 、、、 方向发射激光的示例。黑点表示激光传感器,红线表示激光。
第 个激光传感器位于 ,启动时会向 方向发射激光。不同的激光传感器位于不同的位置。 和 是 到 之间的整数。
你可以自由决定每个激光传感器是否启动。但如果不同的激光传感器发射的激光相遇,会导致检测错误,因此激光不能相交,包括端点。下图展示了激光相交的示例,激光可以在一个点相交,也可以在一条线段上相交。
第 个激光传感器的重要性为 ,表示启动该传感器的贡献值。整个安全系统的安全级别是启动的激光传感器的贡献值之和。
请编写一个函数,在确保激光不相交的前提下,决定哪些激光传感器启动,使得安全级别最大。
你需要实现以下函数:
int max_level(vector<int> X, vector<int> Y, vector<int> D, vector<int> W);
X, Y, D, W
:长度为 的整数数组。对于每个 ,第 个激光传感器的坐标为 ,启动时向 方向发射激光,重要性为 。- 该函数返回在确保激光不相交的前提下,最大可能的安全级别。
注意,提交的代码中不应包含任何输入输出操作。
输入格式
示例评测程序的输入格式如下:
- 第 行:
- 第 行:
输出格式
示例评测程序的输出格式如下:
第 行:max_level
函数返回的值。
提示
样例解释 #1
考虑 的情况。评测程序将调用如下函数:
max_level({1, 2, 3, 4}, {1, 2, 3, 4}, {1, 1, 4, 4}, {1, 1, 1, 1});
下图展示了机密设施、传感器和传感器发射的激光。启动 号和 号传感器,或启动 号和 号传感器,激光不会相交,安全级别为 。没有比这更高的安全级别的方案。
因此,函数应返回 2
。
数据范围
对于所有输入数据,满足:
- 对于所有 ,
- (对于所有 )
- 对于所有 ,
- 每个传感器的位置都不同。
详细子任务附加限制及分值如下表所示。
Subtask | 分值 | 约束 |
---|---|---|
对于所有 , | ||
对于所有 , 且 | ||
无附加限制 |