Modular Sequence

这个题目的官方题解写的挺好的

写成这个样子我们就可以想到先把所有数都模一个\(y\)

然后我们就要考虑怎么构造这个数列了,注意这都已经是E了,一般是不会再出现像前面几道题目的直接构造了,一般是要利用算法了

这里我们就考虑怎么样才能够构造出来类似的数列。对任意一种方案,我们把只有单个\(0\)的blocks全部放到序列最后,我们现在就只需要决定最开始的一连串\(b_1+k_1\)到哪里就行了(也就是\(k_1\)的大小),只要我们前面决定了,我们只用判断剩下的位数是否存在一种合法的方案,最后填写出来符合题意的解

这个时候就要利用DP

其实就是考虑当前数值\(s\),如果用上面说的\(0\: 1 \: 2...\: 0 \: 1\: 2...\)这种形式来填,最少会用多少个数。DP的过程可以想一下然后看CF的代码,非常简单

如果最少的都不行了,那么肯定就不行了;如果最少的可以,那么就存在一种方案了

但是这道题目记得特殊判断\(n=1\)的情况,然后还要记得不要用乘法判断,会溢出,把乘法换成除法

update 2024.7.7

重新做一遍这道题目就差DP这点啊!

我们不用像题解那样先给每个数减去\(x\: mod\: y\),实际上我们可以直接写出如下式子:

\[(s_1+1)x+\frac{(1+s_1)s_1}{2}y+(s_2+1)(x\: mod\: y)+\frac{(1+s_2)s_2}{2}y+...+(s_p+1)(x\: mod\: y)+\frac{(1+s_p)s_p}{2}y=S \]

记住OI的数学题一定要会枚举,所以我们枚举最特殊的\(s_1\),然后所有值就可以得到一系列值(注意\(s_1+1+s_2+1+...+s_p+1=n\)),化简之后就会发现转换为上面题解所说的了

posted @ 2024-02-20 16:27  最爱丁珰  阅读(3)  评论(0编辑  收藏  举报