2336. 皇家骑士的“窄廊”觐见挑战
1000ms
256MB
简单
栈
题目描述
某王国有 5 位骑士,编号分别为 $1, 3, 5, 7, 9$。在国王召见他们之前,他们必须经过一条只能从一边进出的窄长廊。
1. 所有骑士必须按照编号**从小到大**的次序提前在长廊入口等待。
2. 只有当排在前面的骑士进入长廊后,后面的骑士才能进入长廊。
3. 国王可以随时召见当前位于长廊出口(即最后进入长廊)的那位骑士。
请编写程序,判断国王给定的召见编号序列是否合理(即是否为一个合法的出栈序列)。
输入格式
一行,包含 5 个整数,表示国王给出的召见顺序。
输出格式
一行。如果序列合理,输出 `YES`;如果不合理,输出 `NO`。
样例 1
输入 (Input)
3 1 9 7 5
输出 (Output)
YES
样例 2
输入 (Input)
3 5 1 7 9
输出 (Output)
YES
- 骑士编号固定为:$1, 3, 5, 7, 9$。
- **算法提示**:
这是一个经典的**栈模拟**问题。
1. 建立一个空栈,并准备好初始排队序列 $[1, 3, 5, 7, 9]$。
2. 遍历国王给出的目标序列:
- 如果当前栈为空,或者栈顶元素不等于目标元素,就不断从初始序列中取数压入栈中。
- 如果压入后栈顶元素等于目标元素,则执行出栈(表示该骑士被召见)。
- 如果初始序列已经取完,且栈顶元素依然不匹配目标元素,则说明该序列非法。
3. 如果最终所有骑士都顺利“出栈”,则说明序列合理。
› 输入 stdin
CtrlShiftEnter
‹ 输出 stdout
错误 stderr
操作成功