AtCoder Beginner Contest 425 游记

省流

打了 \(5t\) 吃了很多罚时,一般般吧,最后换算成 \(cf\) 大概 \(1700\) 分左右。

9.27

内含剧透,请vp后再来。

不是题解!!!!!!!

赛前

好久之前打的了,早忘了。

赛时

A 题模拟,把正负看反了罚时吃一发。
B 题模拟,忘特判 \(-1\) 了,罚时吃一发。
C 题给了一个数列,有两种操作,一个是把数列整体左移 \(x\) 次,一个是求当前数列 \(l, r\) 的和。那么提前预处理前缀和,然后把数列整体左移换成 \(l, r\) 右移,就可以 \(O(1)\) 的利用前缀和求区间和了。 通过此题时共用时 \(13min\)
D 题给一个零一图,进行无限轮操作,每次操作把恰有一个一相邻的零变成一,问最后有多少个一。因为这一轮新增加的一可能影响这一轮其他零的判断,所以 bfs 并预存每轮变成 \(1\) 的零,这轮结束后再把零变成一,然后去检查这些一周围的数是否符合条件。这样复杂度就变成了 \(O(n*m)\) 且正确性得到保证。我写的时候因为遍历整个图时 \(n\)\(m\) 写反了吃了两发罚时,在 \(28min\) 通过。
E 题给定小于等于 \(n\)\(n(n\leq5e4)\) 个数,要求把这些数塞进 \(n\) 个格子里,问有多少种塞法。对一个非质数取模。因为是非质数所以不能用费马小定理,所以必须用一种不用除法的方法保存一堆组合数的积。考虑唯一分解定理和数的范围,可以把所有阶乘预处理成质数的积的形式,然后利用加减法记录每个质数的个数,最后再直接取模快速幂算出最后的答案就行。通过时 \(56min\)
F 题是给了一个长度小于等于 \(22\) 字符串,要求从一个空串开始加,每次在任意位置加任意字符,要求加到最后是一开始给出的字符串,有多少种加法。途中每一个步骤中有一个步骤的字符串不同就视为不同的加法。显然是 \(dp\) 解决,但是状压不知道怎么解决相同的,区间也搞不明白,最后没出。

赛后

补 F 题,题解给出的是状压,从完整的串删掉字符,如果是一连串的相同字符那么只能删掉最右边那个,很好理解也很好写。然后我写了一种从空串往上加的,遇到一个要加的数时,找到他的后面在下一个已经填的数之前的数,如果相同那么就不填,相当于优先填当前这一段中最后面的那个相同的字符。挂了。后来发现填后面和填前面的对接下来填什么数并不等效,所以挂了。
打这场主要就是发现只要是这种带 \(rating\) 变化的实战场就特别紧张,吃特别多罚时。本来出题算非常快的,但因为罚时吃太多并没有特别明显的优势,需要改进这个,让发挥更稳定些。

2025年9月29日

posted @ 2025-09-29 14:40  vivid_stareium  阅读(10)  评论(0)    收藏  举报