AtCoder Beginner Contest 423 游记(VP)

**# 省流
中规中矩没吃罚时拿下五题。

9.25

内含剧透,请vp后再来。

不是题解!!!!!!!

赛前

前一天晚上的 cf 掉了大分,安慰好自己之后到了晚上已经没什么再在意的了,正常的打一把 abc,没什么可记的。

赛时

A 题要求每次取 1000 + k 元钱,取到取不出为止,问能取多少次。数据范围很小模拟就行了,没必要花几秒时间推式子。
B 题给了你 n 个排成一列的房间,房间中间有门,给定这些门的开关状态,一个人从最左边走,另一个人从右边走,问有几个房间两人都走不到。按题意模拟两人能走到的房间,再用总房间减去就行。
C 题和上一题差不多,但是给你一个人在指定的房间,然后问这个人开关多少次门才能把所有门关上。发现走过去后随手关上就行,也就是两头的门只用关上,剩下中间的门本来开着的关上就行,本来关着的要先开再关,查开着的两端的门中的开关门数量就行。此时过了 17min。
D 题给了一个房间,房间内最多待 n 个人。然后有 m 组人,每组人都会在给定的时间到房间门口然后按顺序排队,每组人一起进房间待指定的时间,如果这组人进去房间就挤满了则再门口等到前面人出来,问每组人进房间的时间。用 set 去模拟房间内当前有多少人,如果剩下的空间比排在门口要进的少则等到前面的人出来,模拟就行。不过我一开始以为是要输出每组人出去的时间,浪费了一些时间,39min 才通过。
E 题直接给了一个推式子题,给你一个数组 a,再给定你一些 l r,让你求
\(\displaystyle\sum_{l = L_i}^{R_i}\sum_{r = l}^{R_i}\sum_{j = l}^{r} A_j\)
推式子是我不太擅长的类型,不过还是坚持下来。发现题目要求的其实是
ai ai + 1 ai + 2
3 + 2 + 1
1 2 3
这样的东西(每列相乘),那么可以去预处理整个数组的这样形式的值,用前缀和求出。再通过求出 ai * 第三行和 ai * 第二行的预处理值,一顿加加减减就可以 O(1) 解决询问了。通过时 89min。
F 题看了一眼,给你 20 个数,求恰好是其中 m 且只有 m 个数的 lcm 的倍数的小于 y 的值有多少个,想了一会,没有什么想法比赛就结束了。

赛后

第二天去看了 F 的题解,学到了很好的做法。对于这样的要选恰好满足 m 个条件的问题,可以先求比较好求的满足这 m 个条件,其他条件可以不满足也可以满足的情况。然后遍历所有 n 个条件,对于第 i 个条件,如果当前这个集合没有满足第 i 个条件,则把这个集合的答案减去这个集合加这个条件满足的集合的答案。n 个条件遍历完后,恰好满足 m 个条件的集合的答案之和就是要求的结果,称为莫比乌斯变换。

2025年9月26日

posted @ 2025-09-26 21:58  vivid_stareium  阅读(3)  评论(0)    收藏  举报