#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。