#L4017. 「CEOI2023」A Light Inconvenience
「CEOI2023」A Light Inconvenience
题目描述
译自 「 」。
背景
表演中演员站成一行,从左到右编号为 ,人数随时间变化。每位演员手持火炬,火炬状态为「点燃」或「熄灭」。初始时,仅最左侧 位演员的火炬是点燃的。
表演分为 幕,每幕开始时会发生以下两种事件之一:
- 右侧加入 位演员(新加入演员的火炬均为熄灭状态);
- 最右侧 位演员离开(离开的演员若火炬点燃,会自动熄灭)。
事件发生后,委员会需执行以下操作:
- 宣布一个非负整数 ,满足 ,且需尽可能小(评分与 比值相关);
- 火炬传递:点燃的演员会将火传给右侧 位演员。具体来说,演员 的火炬被点燃,当且仅当传递前 中至少有一位演员的火炬是点燃的;
- 熄灭控制:宣布需保持点燃的演员列表,需满足:
- 列表按严格递增顺序排列;
- 最右侧演员的火炬必须保持点燃;
- 剩余点燃的火炬数不超过 。
核心任务
实现指定交互函数,在满足所有限制的前提下,完成每幕的 选择和点燃列表指定。
交互过程
本题为交互题,需实现以下三个函数(源代码必须包含文件 light.h):
void prepare():程序开头调用,用于初始化(可空实现);std::pair<long long, std::vector<long long>> join(long long p_a):- 触发条件:右侧加入 位演员;
- 返回值:
(t_a, 保持点燃的演员列表),列表需严格递增;
std::pair<long long, std::vector<long long>> leave(long long p_a):- 触发条件:最右侧离开 位演员;
- 返回值:
(t_a, 保持点燃的演员列表),列表需严格递增。
交互限制
- 禁止读写标准输入/输出(仅可向标准错误流
stderr输出调试信息); - 任何返回值违反限制(如 、列表非递增、列表包含无效编号等),程序会立即终止并判为「Not correct」。
限制与评分
数据范围
- 任意时刻演员人数最大值 ;
- 幕数 。
子任务评分
| 子任务编号 | 附加限制 | 分值 |
|---|---|---|
仅一次 leave 调用 |
||
| - | ||
| 无附加限制 |
子任务 评分细则(按 比值)
| 区间 | ||||
|---|---|---|---|---|
| 分值 |
注:满分要求所有幕的 。
样例交互
交互流程()
| 调用 | 返回值 | 解释 |
|---|---|---|
prepare() |
- | 初始化(无操作) |
| 初始状态 | 仅演员 的火炬点燃 | |
join(3) |
加入 位演员(总人数 ): 1. ,演员 点燃 ; 2. 保持点燃 (熄灭 ) |
|
leave(2) |
离开 位演员(总人数 ): 1. ,无新点燃; 2. 保持点燃 (最右侧) |
|
join(2) |
加入 位演员(总人数 ): 1. ,演员 点燃 ; 2. 保持点燃 (熄灭 ) |
|
join(3) |
加入 位演员(总人数 ): 1. ,演员 点燃 ; 2. 保持点燃 (熄灭 ) |
交互器说明
样例交互器(sample_grader.cpp)
- 从标准输入读取 ;
- 调用
prepare(); - 对每幕:
- 读取输入:正数表示
join(p_a),负数表示leave(-p_a); - 调用对应函数并验证返回值;
- 读取输入:正数表示
- 向标准输出输出交互结果(如
Correct、Invalid return value等)。
实际交互器
仅输出以下结果之一:
Not correct:违反任何限制;Security violation!:读写标准输入/输出;Partially correct:部分子任务通过;Correct:全部限制满足。