标签:打表 lin 等于 二次 http 就是 图片 strong 操作
作为鸽子,回到家已经不想开电脑了,于是当场外选手快乐口胡。
div2的AB就咕了吧。
以下全都是口胡!
T1就来构造题不太好吧/kk
考虑如何操作一个序列:显然应该每次找最靠前的\(a_i=i\)的位置,然后操作它。
考虑如何算出一个长度固定的序列能操作多少次(在合法的情况下):从后往前推,设后面一共操作了\(x\)次,那么加上这个位置之后就会操作\(x+\lceil x/i\rceil\)次。还有一个特例:如果\(i|x\),那么也可以操作\(x+x/i+1\)次。
注意到这个特例有点意思,所以可以发现长度固定的序列,后缀操作的次数是一个区间内的任意整数。
不妨大胆猜想长度\(n\)是可以二分的,那么二分\(n\)之后做一遍上面的倒推,即可求出\(n\)过大还是过小,或是构造出解。
经过打表可以发现\(n\)大概是\(2\times 10^6\)级别的。
这样直接做复杂度\(O(n\log n)\),被出题人卡掉了。
我的想法:打表,预处理几个\(n\)出来,然后就可以减小二分范围,或是干脆把\([1,10^{12}]\)都覆盖掉。
题解做法:打表,发现\(\frac{n^2}{n+k}\)会趋近一个叫\(\pi\)的神秘常数,那么可以缩小二分范围。
离线,把每个位置第一次出现的时间给处理出来。
由于每一种权值被触发的次数之和是\(O(n\ln n)\)的,所以考虑把每一个权值的答案都处理出来。
于是对于一个权值,我们可以求出它在什么时间之后才能跳\(i\)次。
然后就做完了???
也可以直接在线做,每次修改的时候把能往后跳的权值找出来暴力跳。
由于场上降智了并没有想到怎么把能往后跳的权值找出来
见到数论当场暴毙……
赛后想了一下有一些思路,不过还是只会\(p\)是质数的情况。设\(P=\prod p_i\),那么显然可以把每一个\(p\)的答案乘起来(用中国剩余定理证明),但是我只会算\(p_i\)的答案模\(p_i\)得到的值。
滚去看题解,然后……
我太难了,而且现在我还是不会证/kk
丢个\(p\)是质数的做法就跑吧/kk
先把式子换成\(x+y\equiv a\pmod{p}\),然后对于每一组\((x,y)\),方案数是两者二次剩余的解的个数相乘。
然后把\(y\)换成\(a-x\)。
由二次剩余的理论,\(\sqrt x\)的解的个数就是\(x^{(p-1)/2}+1\pmod p\),所以令\(m=(p-1)/2\),答案的式子可以写成
由二次剩余(或其他)的理论,\(\sum\limits_{i=0}^{p-1} i^m=0\),所以式子其实就是
把后面那东西爆开来,得到
后面的东西是一个自然数幂和,可以证明它等于\(-[m+k=p-1]\),方法可以用斯特林数+卢卡斯定理,或是其他更好的做法。
所以最终答案就是\((-1)^{m+1}\)。
我真的不会算不取模的值啊/kk
不会,咕了。
标签:打表 lin 等于 二次 http 就是 图片 strong 操作
原文地址:https://www.cnblogs.com/p-b-p-b/p/12952288.html