Appearance
题目
一个栈的入栈序列为1,2,3,⋯,n,其出栈序列是p1,p2,p3,⋯,pn,若p2=3,则p3可能取值的个数是()。
错因
A
误以为 三个位置必须各不相同,所以" 不能等于 这三个特定值",于是答 。但其实 不固定(既可能是 1,也可能是 2,还可能是 4), 可以取的值远不止"排除 1,2,3"那么少。真正不可能的只有 这一个(3 已经被 出过了)。
B
只考虑了""和" 某个特定值"两个限制,答 。漏掉了:实际上只有 一种情况被排除,其余 共 个值都能通过适当的入出栈操作做到。
D
觉得" 没说清楚,栈的状态不固定,没法计数"。但栈题的标准做法就是枚举 的所有合法情况,每种情况下推出 的可行集合,再求并集——题面信息已经够定一个具体的数。
总解析
核心观察:3 已经在 出过,所以 必然。剩下需要证明 中每个值都可达,那答案就是 。
枚举 的合法取值( 的前提下):
| 情况 | 入出栈过程 | 之后栈中元素 | 可取 | |
|---|---|---|---|---|
| 1 | 1 | 入1出1,入2,入3出3 | ;或入 出 ,得 | |
| 2 | 2 | 入1,入2出2,入3出3 | ;或入 出 ,得 | |
| 3 | 4 | 入1,2,3,4出4,出3 | (栈顶 2) | ;或入 出 ,得 |
为什么 不能 ?想让 ,必须在出 时栈顶就是 3。若 ,那么 3 入栈后又入了 ,出 后栈顶是 ,违反约束。
合并三种情况的可达集:
- :情况 2 ✓
- :情况 1、3 ✓
- :不可能(3 已出)
- :情况 1、2 ✓(情况 3 中 4 已出,不算)
- ():所有情况都能实现 ✓
所以 的可取值集合 = ,唯一被排除的是 3,共 个。
最终答案是 C(n-1)。