2371. 校门外的灯

1000ms 256MB 简单 模拟法
题目描述
在一座大门外长度为 $L$ 的马路上有一排路灯,每个相邻的路灯之间的间隔都是 1 米。我们将马路看成一个数轴,数轴上的每个整数点 $0, 1, 2, \dots, L$ 都安装有一个路灯,依次编号为 $0, 1, \dots, L$。 每个路灯的拉动开关可以按照 **关 $\to$ 红 $\to$ 黄 $\to$ 绿 $\to$ 蓝 $\to$ 关** 的顺序循环变化。我们用数字来代表路灯的五种状态: - `0`:关 - `1`:红 - `2`:黄 - `3`:绿 - `4`:蓝 最初所有路灯都是关着的(状态为 `0`)。现有 $n$ 次行动,每次行动给出当前行动的类型 `op` 以及区间 $[s, t]$。每种行动的具体规则如下: 1. **`op = 1`**:把编号 $s$ 到 $t$ 之间所有的灯(包含 $s$ 和 $t$)都变成关闭状态(`0`)。 2. **`op = 2`**:把编号 $s$ 到 $t$ 之间所有处于开着状态的灯(状态不为 `0`)进行调整,拉动开关直到变成**红色**(`1`)或**绿色**(`3`)时停止。 3. **`op = 3`**:把编号 $s$ 到 $t$ 之间所有的灯进行调整,拉动开关直到变成**蓝色**(`4`)或**黄色**(`2`)时停止。 4. **`op = 4`**:把编号 $s$ 到 $t$ 之间所有的灯,按照它是区间内第几个灯就拉动几次的顺序进行调整。即位置 $s$ 上的灯拉动 1 下,位置 $s+1$ 上的灯拉动 2 下,……,位置 $t$ 上的灯拉动 $t - s + 1$ 下。 请计算:当所有行动顺序结束后,处于关闭状态(`0`)的灯的数量。
输入格式
- 第一行包含两个整数 $L$ 和 $n$ ($1 < L \le 10000, \quad n \le 10000$)。 - 接下来 $n$ 行,每行包含三个整数 `op`、`s`、`t` ($1 \le \text{op} \le 4, \quad 0 \le s \le t \le L$)。
输出格式
- 输出一行一个整数,表示所有行动结束后处于关闭状态(`0`)的灯的数量。
样例 1
输入 (Input)
10 2
4 2 8
2 1 9
输出 (Output)
5
- 对于 $100\%$ 的数据:$1 < L \le 10000$,$n \le 10000$,$0 \le s \le t \le L$。 - **状态转移逻辑提示**: 将开关拉动 1 下相当于状态值 `(state + 1) % 5`。 - 对于 **`op = 2`**:若当前状态为 `2`,拉 1 下变成 `3`(绿),停止;若当前状态为 `4`,拉 1 下变成 `0`,再拉 1 下变成 `1`(红),停止(相当于变为了 `1`)。 - 对于 **`op = 3`**:若当前状态为 `0` 或 `1`,拉动使其变为 `2`(黄);若当前状态为 `3`,拉动使其变为 `4`(蓝)。
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字