#ASC202630. 电机速度斜坡控制与急停
电机速度斜坡控制与急停
题目背景
智能车电机不能在普通调速时瞬间跳到目标速度:加速和减速都受到每个控制周期最大变化量的限制。但发生急停时,必须立刻将输出清零,并保持锁定,直到收到复位指令。
题目描述
控制器初始时未锁定,目标速度和实际输出速度均为 0。依次处理 n 个控制周期,每个周期收到一条指令:
SET x:若未锁定,将目标速度设为 x;若已锁定,忽略该指令。KEEP:保持当前目标速度不变。STOP:立即将目标速度和实际输出速度都设为 0,并进入锁定状态。重复收到STOP不会增加急停次数。RESET:解除锁定,将目标速度和实际输出速度都设为 0。无论原来是否锁定,效果相同。
处理完指令后,若控制器未锁定且本周期指令不是 STOP 或 RESET,则将实际输出速度向目标速度调整一次:加速时最多增加 A,减速时最多减少 D,不能越过目标速度。锁定期间实际输出速度始终为 0。
请输出每个周期结束时的实际输出速度,并统计从未锁定状态进入锁定状态的次数。
输入格式
第一行包含四个整数 n、V、A、D,分别表示控制周期数、最大速度、每周期最大加速量和每周期最大减速量。
接下来 n 行,每行是一条指令,格式为 SET x、KEEP、STOP 或 RESET。其中 SET x 的 x 是 0 到 V 之间的整数。
输出格式
第一行输出 n 个整数,按顺序表示每个周期结束时的实际输出速度,用一个空格分隔。
第二行输出进入锁定状态的总次数。
样例
13 100 20 30
SET 70
KEEP
KEEP
KEEP
SET 10
KEEP
STOP
SET 80
KEEP
RESET
SET 50
KEEP
KEEP
20 40 60 70 40 10 0 0 0 0 20 40 50
1
样例解释
前四个周期逐步加速至目标速度 70;第 5、6 个周期逐步减速至 10。第 7 个周期急停,立即输出 0 并锁定。锁定时的 SET 80 被忽略;第 10 个周期复位后,新的 SET 50 才开始生效。整个过程中只发生一次从未锁定到锁定的切换。
数据范围
1 ≤ n ≤ 100000,1 ≤ V ≤ 1000000,1 ≤ A,D ≤ 1000000。所有指令合法,且 SET x 满足 0 ≤ x ≤ V。
时间限制:1 秒;内存限制:256 MiB。