北京海淀区信息学竞赛 · 2023 北京市海淀区信息学竞赛(初赛)试题 第 9 题

选择题 · 答案 C

← 整套速查表 北京海淀区信息学竞赛 全部真题

题目

队列快照问题:队列快照是指在某一时刻队列中的元素组成的有序序列。例如,当元素 $1, 2, 3$ 入队,元素 $1$ 出队后,此刻的队列快照是 $\{2, 3\}$。当元素 $2, 3$ 也出队后,队列快照是 $\{\}$,即为空。

现有 $3$ 个正整数元素依次入队、出队。已知它们的和为 $8$,则共有( )种可能的不同的队列快照(不同队列的相同快照只计一次)。

例如,$\{5,1\}$,$\{4,2,2\}$,$\{\}$ 都是可能的队列快照;而 $\{7\}$ 不是可能的队列快照,因为剩下的 $2$ 个正整数的和不可能是 $1$。

答案:C

解题思维

这题其实是考‘正整数拆分’的组合计数。拿到题先想:三个正整数和为8,有多少种有序三元组?再想:每个三元组在入队、出队过程中会产生哪些不同的快照集合?最后把重复的集合去重,数一下总数。

常见错误

容易把‘不同的队列’和‘不同的快照’混为一谈,以为有多少种三元组就有多少种快照;或者漏掉空队列这种特殊情况;还有人会忘记快照是有序序列,把{1,2}和{2,1}当成同一种,导致计数偏少。

详细解析(节选)

考点:正整数拆分与组合计数;快照是队列中元素的有序序列,入队出队过程产生的快照集合要去重。

先求三个正整数和为8的有序三元组个数。相当于把8个相同小球分给3个不同盒子,每盒至少1个,用隔板法:C(8−1,3−1)=C(7,2)=21种。这21种三元组就是所有可能的‘初始队列’。

对每个三元组,模拟入队、出队过程:三个元素依次入队,得到快照{a,b,c};然后依次出队,得到{b,c}、{c}、{}。所以每个三元组最多产生4个快照:{a,b,c}、{b,c}、{c}、{}。

现在要统计这21个三元组产生的所有快照集合里,有多少个不同的有序序列。注意{}只出现一次,肯定计入。其余三个非空快照来自三元组的子序列:长度为3的只有{a,b,c}本身;长度为2的是{b,c};长度为1的是{c}。因此,不同快照的总数等于:

易错点:忘记c的范围是1..6而不是1..7,多算一个{7}(需要a+b=1,不可能),就会得到50;也有人把{c}和{b,c}混淆,或者把空队列漏掉。命题人喜欢在这里挖坑:看似简单的拆分,实则要细心枚举边界。

考频趋势:近五年海淀区信息学竞赛中,此类‘正整数拆分+组合计数’的单选题出现频率较高,约占总题量12%,且常与队列、栈等数据结构结合,考查对有序序列的理解。

预测:未来仍可能以‘拆分+快照/子序列’形式出现,或增加‘允许零’的变式,但核心仍是组合计数与去重。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断