- 月赛题解
【202506】月赛语法组题解
- @ 2025-6-16 11:32:17
语法组月赛视频讲解
▶ 点击查看讲解视频
T1: 马拉松
顺序结构
求出分钟是 ,秒数是
T2: 点外卖
选择结构
根据题目中的条件分别判断两个APP是否到达了优惠券的使用条件,如果到达了使用条件,更新花费价格的最小值即可
T3: 弹力球
for循环
对于 的数据,小球不会反弹,那么我们用一个变量记录小球的位置,直接按顺序模拟即可。
对于 的数据,我们注意到题目中的 ,也就是小球碰到边界后的反弹至多一次,所以可以直接算出小球反弹后的位置,进行快速计算。
T4: 纯偶数
数位分离
题目要求我们从最低位开始移除数字,那么等于删除掉数字的最后一位,可以联想到用数位分离进行处理。
我们的目标是使得数位中不出现奇数,所以我们可以用第一次数位分离先算出数字中奇数的数量,第二次数位分离去统计需要操作的次数,当奇数位还存在的时候执行数位分离。
T5: 密码学
字符串,模拟
题目要求我们模拟加密和解密的两个过程,加密我们可以用一个数组记录每个字母被转化为了哪一个,然后再进行循环位移的操作,对于 的情况,可以直接进行模拟。
我们发现循环位移的操作是有规律的,循环每 次后的字母都是相同的,所以我们可以把 再进行计算。
对于解密操作,可以把加密的操作倒过来做,原来是先变换字母,向后循环位移,那么我们改成先向前循环位移,后变化字母,所以我们需要记录每个字母是由哪个字母转化过来的,具体的实现参考代码。
T6: 倍增数
-
对于 的数据,可以直接枚举 的每一个数字,然后检查是否为倍增数即可。
-
对于 的数据, 我们注意到倍增数的右边是左边数位的 倍,那么如果我们知道了左半边的数字,其实右半边的数字也可以确定下来了,所以我们只枚举倍增数的左边,然后就可以得到倍增数的右边,再合并计算出数字的大小,如果数字在 的范围中,那么就可以计入答案,此处使用字符串处理起来会相对好写一些。
-
对于 的数据, 我们需要观察倍增数的性质,如果数字的位数 是奇数,例如 ,那么左半边最大可以取到 ,答案为 ,对于 是偶数的情况,我们发现 位的倍增数有限制,我们可以先计算位数小于 的倍增数,有 $\ 10^{\large \lfloor \frac{\large len}{2}\rfloor-1} -1$ 个。然后倍增数的大小是有单调性的,会单调递增,如果我们的左部分能够选 ,那么 肯定可以选到,例如我们有 ,那么左半边肯定可以选取 ,对于 左半边是否可以选择,我们可以单独检查,即构造出对应的右半边,此处推荐使用字符串来写,并且字符串的长度一样,可以利用字典序比大小。