Joyboard

我们发现对任意的\(a_{n+1}\)\(a_1\)一定为\(0\)

如果\(a_2\)\(1\),那么不难发现,\([3,n]\)都为\(1\)

再手玩几次,就会发现,数列只有可能是这个样子:\([1,i]\)\(0\)\([i+1,n]\)\(i\),然后我们再决定\(a_{n+1}\)为多少

不难发现,当\(k=1\)的时候,答案为\(1\);当\(k=2\)的时候,答案为\(min(n-1,m)+\lfloor \frac{m}{n} \rfloor\);当\(k≥4\)的时候,答案为\(0\);现在主要是来计算当\(k=3\)的时候

考试的时候想的是正面计算,确实可以,但是非常耗费时间,放在C题就不是让你这么算的,此时我们要想一个简单的方法,就一定要从反面考虑,输出\(m+1-1-(min(n-1,m)+\lfloor \frac{m}{n} \rfloor)-0\)即可

然后讲一下正面的计算:不难发现公式是\(\sum_{i=1}^{n-1} \lfloor \frac{m-i}{n} \rfloor\),我们很容易地想到整除分块,但是整除分块实际上不是这个形式,所以我们仍然考虑贡献,设\(\lfloor \frac{m-i}{n} \rfloor=k\),不难有\(m-n(k+1)<i≤m-kn\),我们发现对同一个\(k\)\(i\)的个数都是\(n\)个(这里就是跟整除分块不一样的地方了,整除分块由于变量在分母,所以是有这么一个分块在的东西,然后这里变量在分子,显然循环节都刚好是\(n\))。但是这里有一个细节,因为我们限制了\(i\)的上下界,所以我们也要求出\(k\)的上下界,并且对\(k\)的上下界进行单独的讨论,这里就是最麻烦的地方了(比如我考场上只想到了求\(k\)的上界,却忘记了求\(k\)的下界,显然这不是一个C题该有的样子)

posted @ 2024-03-25 16:34  最爱丁珰  阅读(5)  评论(0编辑  收藏  举报