洛谷入门赛 #46 命题报告

· · 休闲·娱乐

本文将会介绍 洛谷入门赛 #46 (2026.04) 题目的 idea 来源、命制过程和赛后反思。

我觉得通过阅读本文,大家不仅可以更全面地理解本次入门赛的题目,同时还可供后续出题人或者选手作为参考。

真正的入门级选手未必看得懂这篇文章,因为出题人视角,通常会高于做题人视角,而从做题人到出题人的这些抽象能力,通常需要一定的练习才能习得。

本文将按照 idea 获取时间排序。

E. 时区(复杂循环)

其实我提交第一版题面时,这是 C 题,因为只有一重循环。

idea 来源

我之前听到过一个关于夏令时的笑话:

小明听说在部分地区,会在指定的一天实行“夏令时”:在当天的凌晨 2 点,该地区的时间将会往回调 1 个小时。

于是小明在凌晨 2 点,把闹钟往回拨到 1 点,过了一小时,发现闹钟又变成了凌晨 2 点,于是他又把闹钟往回拨到 1 点,如此往复...

于是我就意识到,小朋友们如果变量含义混乱,可能造出死循环,这玩意可以作为考点。

命题过程

注意到:

那么,还有没有什么办法能够让时钟偷摸往回调一小时呢?于是我就想到了小学科学课本介绍的时区。

然后写了一份 std,虽然只有 295 B,但是里面的每个坑都很有教育意义(详见稍后写的题解),我非常满意。

(虽然后面被换到 E 的时候,我还是有点担心是否配得上 1300,但是赛时答题情况告诉我,我多虑了。)

赛后反思

这题被很多人说,题目偏难,“手感”太差。

但是我不反思,因为我确有一种非常简短、能一遍写对的方法。

或许选手通过本题,就能意识到 think twice, code once 的重要性了——程序架构设计得好不好,对代码难度影响真的很大。

C. 差不多就得了(简单循环)

本来这玩意套了个多测强行放 E。后来因为 Aya 老师觉得时区太难了,于是我把多测删了,并交换了两题。

idea 来源

作为基础赛审核,有人问我,自己有个好玩的 idea,但是是个构造题,算不算“构造思想”(NOI 级知识点)。

我:不能因为它是个构造题就说构造思想,我们只是不推荐构造题的形式,但是如果 idea 足够好玩我们也是可以通过的。

我:不然的话,“输入 a,b,输出整数 c 使得 c-a=b 难道使用了 NOI 级知识点吗?”

于是我就想到了,我可以在 div. 4 里面放一个构造题。

命题过程

E 题已经出现了 Alice, Bob 俩人物,那我复用一下吧。

既然我是 yummy,那么让 Bob 制作一些 yummy 的饼干,很合理吧。

既然有俩人,那么我让 Bob 平分一下饼干 ... 但是 div. 4 显然没有背包 ... 那就放宽限制,采用最朴素的循环就能过吧,出完啦!

Aya:“小朋友们真能想到正解的方案吗?”

我:“要不这样吧,我直接让 Bob 把正确方案说出来,这样就纯考察语法了。”

没错,这个题最开始 Bob 并没有恍然大悟。

赛后反思

没什么要反思的,大家基本都顺利通过了,甚至有人没注意到这个题是构造题,揣测出题人心思这块(

G. 场地布置(语法综合)

其实这题一开始是 F(二维数组 / 数组综合)的位置。

另外,本题的教学意义大于比赛意义。

idea 来源

前面几个月,F 题都出的二维数组,这次我们不考察二维数组,而是在一维数组上叠个二重循环怎么样?

另外,小朋友们学到二维数组,想必已经有段时间了,但是“解决生活中的实际问题”的经验恐怕没有多少。

生活中的问题通常是白箱测试,小规模情形下程序出问题了修就行,也没有那么严格的输入输出格式限制。于是,我就想让选手写一个程序,给你一个完全不处理的文本,提取里面的数字,于是就有了这道题。

同时,作为入门赛,本题需要有一定教育意义,所以本题直接作为打表教学关了。哪怕选手使用别的方法直接逃掉数据处理,也学会了打表的思想。

赛后反思

不过短期内我们不会出类似的题目。下次如果出打表题会尽量提高手敲的代价。 不过 Aya 老师说,蓝桥杯经常有这种抄写表格题,那某种意义上我们也算和一些有影响力的赛事接轨了。 ## A. 古希腊掌管节奏的神 II(顺序结构) ### idea 来源 上个月的 A 题只用到了减法,我们这次换个运算,考一下除法。 作为一个音游玩家,我很快想到了“每分钟节拍数(BPM)”的概念,然后挑了一个耳熟能详的节奏,出了这道题。 ### 出题过程 其实,这题的题面也迭代过一次。最初的题面是(斜体为发生改变的部分): > 高中生 Alice 最近想要对一个经典的节奏 $\texttt{X X }\underline{\texttt{XX}}\texttt{ X}$ 进行解析,其中 $\texttt{X}$ 为*一个四分音符*,$\underline{\texttt X}$ 为*一个八分音符*。*八分音符*代表的时长为*四分音符*的一半。 > > 现在,Alice 希望以每分钟 $n$ 个*四分音符*的速度演奏上面的节奏。请帮 Alice 算一算,在这个速度下,这五个音符所代表的时长分别是多少毫秒? 主要修改是,不给这两个音符起名字,让题意更加直接。不过,似乎直接看样例解释更快一点。 虽然我当年的小学音乐课本里面,其实给出过四分音符、八分音符的概念,但是我不太清楚现在改成什么样了,有说法说改教五线谱了。 ## H. 生日邀请(字符串) ### idea 来源 yummy 对照了前几个月的字符串题,发现一个共同点:前几个月的题,几乎都是从前往后扫描一遍,发现指定的模式(大写字母、句点、数字)就执行对应的操作(替换、插入、删除、将答案 $\times 10$ 再加上这个数码)。 或者专业一点,前几个月的字符串题都只用到了字符串的**局部性质**。我们能不能开发一点不一样的呢? 其实也不是没有过,但是最常见的考法也就是,让你数数这个串有多少回文串、有多少符合题意的子串一类。 字符串题不应该只有这些。我们有没有办法让选手先查找子串,然后在串子之间横跳呢? ### 出题过程 有了 idea,给它随便套个题目背景吧,沿用 Alice 和 Bob。 既然 Bob 已经分饼干给 Alice 了,这次让 Alice 做主,让她邀请别人。 另外,选手不难在样例中注意到,Alice 的生日邀请中,只要有其他人到,Bob 都必然会到,但是 Bob 不好意思单独和 Alice 一起过生日。 当然这是理所当然的,前面那些题都暗示到这里了。不过,Alice 和 Bob 最终结局如何嘛,我也不知道。 ## B. 礼堂预约 II(分支结构) 注意到 A 题题目名称已经复用 yummy 过去一道压轴题的名称了,不如这道题也整个活。 A 题引入 Alice,这道题当然要引入 Bob,不然后续的叙事无法开展。 ## D. Typhoon(简单数组) 凑数题。 ### idea 来源 Typhoon 是初中的时候,英语课上老师给我们玩的一个小游戏,里面有一个技能是交换卡。 > 哎,要不下次把这个小游戏的完整版本拿出来出题(bushi) > > 没关系,下次这个题出出来的时候,真入门组选手看不出来它来自什么游戏的,我会让它改头换面的。 ### 出题过程 我知道有些选手看到“所有人坐成一个环”之类的会有阴影,但是这道题要告诉大家的是: > 如果题目没有出现“环上相邻的人 ...”的条件,那么坐成一个环,和直接编号,并没有什么区别。 我让所有人坐成一个环,其实单纯想让 Alice 和 Bob 座位相邻。至于 Alice 优先和 Bob 换,只是单纯交代一下两人现在的关系,解释一下为什么 E 题 Alice 会坐飞机去看 Bob。 ## F. 追忆?(二维数组) 另一道凑数题。 ### idea 来源 我现在需要一个二维数组题。我可以钦定两个维度分别是什么意思。 之前的题目中,通常输入就是一个方格图或者矩阵。但是这次我不一样,我要让第一个维度表示“时间”。 然后发现故事线里面,为了引出时间,Bob 应当追忆过去(才能让选手去回答“之前”的问题),然后题目名称整了点小活。