数学专测

第一测:
1.解方程
首先可以想到对于后(n2)个的话,有和没有是没区别的。
这样对于(n1)的部分做一个背包就可以了。
然后用做完的背包乘上一个组合数即可。
这样分不高。
正解是我们考虑进行子集反演。
我们将前(n1)个分子集进行计算。
怎么做?
(g[S])为至少让(S)中的元素大于限制的方案数,(f[S])为恰好(S)中的元素大于限制的方案数了。
这样就简单了。
我们知道:

[t=sumlimits_{iin S}a_i ]

那么:

[g[S]=inom{n-t+K-1}{K-1} ]

这样我们知道:

[g[S]=sumlimits_{Ssubseteq T}f[T] ]

子集反演得到:

[f[S]=sumlimits_{Ssubseteq T}(-1)^{|T|-|S|}g[T] ]

也就是说:

[f[emptyset]=sumlimits_{emptysetsubseteq T}(-1)^{|T|}g[T] ]

现在唯一的问题就是计算组合数了。
关于任意模数组合数:https://www.cnblogs.com/Lrefrain/p/12149736.html
这样连组合数也解决了这就成了水题了。

2.宇宙序列
这个可以看出来是(xorFWT),直接暴力卷积就有(50)分了。
然后我打了一种找循环节的方法。
也就是判断某一个数在什么位置会循环。
由于我们要求的(F^{2^{i}})中的(i)应该(mod varphi(varphi(10007))=5002)
而且模数十分小,我们只需要对于每个数处理出循环节即可。
这样将每个位置的值将系数乘起来就可以得到最终的点值表达式,这样直接(IFWT)回来就可以了。

3.exp
期望神题,一辈子也想不出来。
首先可以直接用状压暴力。
然后。
我们设:
由于最后一个点的期望是确定的,是(frac{n-1}{2}),所以直接枚举最后一个的位置即可。
(g(l,r))([l,r-1])均为(.),([r])(X)的概率。
(dp(l,r))为其他位置均不变,([l,r-1])均为(.),([r])(X)的期望。

[num(l,r)$$为$[l,r]$之间的$.$的个数。 这样就可以转移了。 做一个区间$dp$,枚举中间端点转移。 $$egin{aligned} pr_{mid}&=left(frac{mid-l+1}{r-l+1} ight)^{num(l,mid)}left(frac{r-mid}{r-l+1} ight)^{num(mid+1,r)-1}inom{num(l,mid)-1}{num(l,r)-2}g(l,mid)g(mid+1,r)\ g(l,r)&=sumlimits_{mid=k}^{r-1}pr_{mid}\ dp(l,r)&=frac{1}{g(l,r)}sumlimits_{mid=l}^{r-1}pr_{mid}(dp(l,mid)+dp(mid+1,r)+frac{mid-l}{2})\ end{aligned}]

解释一下:
对于(g)来说,我们需要计算的(pr_{mid})就是从(mid)进行转移来的概率。
这是一长串的含义是:
首先我要在让(num(l,mid))个在左侧,而(num(mid+1,r)-1)个在右侧,这样分别乘两个分数的次幂表示概率。
其次我要在(num(l,r)-2)个位置中按照次序选择(num(l,mid)-1)个位置,剩下的留给右侧的,这样是一个组合数。
然后就是两侧的情况存在的概率了。
对于(f)来说我们记录(g)的原因就是为了正向推倒期望,最后对于各个情况的概率作出一个加权平均,所以最后要除以(g(l,r))

第二测:
1.B
傻逼杜教筛随便推一下。
设:
(g(n))(gcd({a_i})|n)的方案。
(f(n))(gcd({a_i})=b)的方案。
那么:

[g(n)sumlimits_{n|d}f(d) ]

莫比乌斯反演得到:

[f(n)=sumlimits_{n|d}mu(frac{d}{n})g(d) ]

[ans=f(1)sumlimits_{i=1}^{n}mu(i)g(i) ]

我们尝试求(g(i))

[g(i)=inom{lfloorfrac{n}{i} floor+K-1}{K} ]

也就是我把(K)个普通数和(lfloorfrac{n}{i} floor)个标记数一起排序,这个数左侧有几个标记数就代表这个数的是(i)的多少倍,而我们要求这个数是正数,所以必须保证这个数左侧的标记数不能为(0)个,所以位置不能是第一个,也就是说从(lfloorfrac{n}{i} floor+K-1)个位置中选择(K)个位置。
所以就是那个组合数了。
那么:

[ans=sumlimits_{i=1}^{n}mu(i)inom{lfloorfrac{n}{i} floor+K-1}{K} ]

注意数据范围比较大,所以用杜教筛。
然后预处理一千万以内的阶乘,剩下的大于一千万的就用(1000)次暴力乘出来即可。

2.B君的回忆
是个结论题。
我考场上推出一种(BSGS)的写法。
然后细节没写对就挂了。
其实这个嵌套就是在求循环节。
因为转移矩阵只有四个位置,所以必然存在循环节(我不知道有多大,不过对于一个质数来说标程给出的循环节是不超过(2p+1))。
这样设循环节为:(varphi(p))我们得到这样一个式子:

[A^{varphi(p)+k}equiv A^k(mod p) ]

也就是说:

[A^{varphi(p)}equiv I(mod p) ]

我们设:

[varphi(p)=asqrt{2p+1}-b ]

[A^{asqrt{2p+1}}equiv A^{b}(mod p) ]

这个东西是(BSGS)的板子了。
这样这个循环节就可以用于更加内层的取模了,递归到最后一层再回代即可。
这样就有(60)了。
剩下的要用结论来优化了。
怎么做?
我们发现线性代数中的这个循环节(f(a))和欧拉函数具有很相似的性质:

[aperp b,f(a)f(b)=f(ab) ]

这个是因为各个模数之间互不干扰。

[f(p^k)=f(p)p^{k-1} ]

这个是因为(p^k)相当于将模长扩大了(p^{k-1})倍。
这样的话我们对于某一个数(n)直接用几个结论将要求的范围变成这个数的全部质因子,这样复杂度大大降低了,我们再顺手求出小于(sqrt{p})个质数和他们的循环节大小,然后用哈希表存一下就可以了。

3.sanrd
首先对于(b=0)的情况:

[egin{aligned} ans_k&=sumlimits_{i=0}^{n}A_i(dc^{2k}+e)^i\ &=sumlimits_{i=0}^{n}A_isumlimits_{j=0}^{i}inom{i}{j}(dc^{2k})^je^{i-j}\ &=sumlimits_{j=0}^{n}(dc^{2k})^jfrac{1}{j!}sumlimits_{i=j}^{n}i!A_ifrac{e^{i-j}}{(i-j)!}\ end{aligned}]

后面的部分可以卷成一个多项式,没一项系数为(B_j)
所以:

[egin{aligned} ans_k&=sumlimits_{j=0}^{n}(dc^{2k})^jB_j\ &=sumlimits_{j=0}^{n}d^jc^{2jk}B_j\ &=sumlimits_{j=0}^{n}d^jc^{(j+k)^2-j^2-k^2}B_j\ &=frac{1}{c^{k^2}}sumlimits_{j=0}^{n}c^{(j+k)^2}frac{d^jB_j}{c^{j^2}}\ end{aligned}]

再次卷积就可以算出来了。

然后考虑(b!=0)的情况:
这样发现已经不是二项式形式了。
我们考虑把它换成二项式来进行展开。

[bc^{4k}+dc^{2k}+e=b(c^{2k}+h)^2+w ]

那么:

[h=frac{d}{2b},w=frac{4be-d^2}{4b} ]

[egin{aligned} ans_k&=sumlimits_{i=0}^{n}A_i(b(c^{2k}+h)^2+w)^i\ &=sumlimits_{i=0}^{n}A_isumlimits_{j=0}^{i}inom{i}{j}(b(c^{2k}+h)^2)^jw^{i-j}\ &=sumlimits_{j=0}^{n}b^j(c^{2k}+h)^{2j}sumlimits_{i=j}^{n}inom{i}{j}A_iw^{i-j}\ &=sumlimits_{j=0}^{n}b^j(c^{2k}+h)^{2j}frac{1}{j!}sumlimits_{i=j}^{n}i!A_ifrac{w^{i-j}}{(i-j)!}\ end{aligned}]

再次将后面卷积为(B_j)
那么:

[egin{aligned} ans_k&=sumlimits_{j=0}^{n}b^j(c^{2k}+h)^{2j}B_j\ &=sumlimits_{j=0}^{n}b^jB_jsumlimits_{i=0}^{2j}inom{2j}{i}c^{2ik}h^{j-i}\ &=sumlimits_{i=0}^{2n}c^{2ik}sumlimits_{2j>=i}^{2j<=2n}inom{2j}{i}h^{j-i}b^jB_j\ &=sumlimits_{i=0}^{2n}c^{2ik}frac{1}{i!}sumlimits_{2j>=i}^{2j<=2n}(2j)!b^jB_jfrac{h^{2j-i}}{(2j-i)!}\ end{aligned}]

后面的部分卷积大小扩大为(4n),但有用的部分只有(2n),我们发现只有关于(j)下标偶数的时候才可以有值其他的均为(0),因为(2j)必然为偶数,设卷积得到的为(C_i)

[egin{aligned} ans_k&=sumlimits_{i=0}^{2n}c^{2ik}C_i\ &=sumlimits_{i=0}^{2n}c^{(i+k)^2-i^2-k^2}C_i\ &=frac{1}{c^{k^2}}sumlimits_{i=0}^{2n}c^{(i+k)^2}frac{C_i}{c^{i^2}}\ end{aligned}]

仍然可以卷积,由于后面的部分长度为(2n),前面的部分长度为(3n)所以,卷积的长度为(5n)
这样卷积三次就可以得到答案。
然而不能(AC)
为什么呢?
特判不够。
注意到我上面进行多项式卷积的时候用(c)做了分母。
(c)是可能等于(0)的。
这样特判一下直接暴力计算就可以了。

第三测:
如果说前两测还是挺中规中据的话,第三次就有点鬼畜起来了。

young
是个(dp)不写了,反正在给我来一次我也想不出来。

simple
莫比乌斯反演和杜教筛。
考虑循环节小于(n)的数字。
那么在第二次循环的时候必然就比原序列小了,肯定不合法。
那么合法的只有那些循环节为(n)而且在循环同构的过程中得到的字符串中原串的排名是最小的。
也就是循环同构的(n)个数字中只有一个是合法的。
那么其实求出所有循环节为(n)的然后等价类计数就可以了。
我们设:
(g(n))为循环节为(n)的约数的数字个数。
(f(n))为循环节为(n)的数字等价类个数。
那么:

[g(n)=sumlimits_{d|n}df(d) ]

莫比乌斯反演得到:

[nf(n)=sumlimits_{d|n}mu(d)g(frac{n}{d}) ]

[g(n)=10^{n} ]

那么:

[f(n)=frac{sumlimits_{d|n}mu(d)10^{frac{n}{d}}}{n} ]

然后将其代入贡献式,则:

[egin{aligned} ans&=sumlimits_{i=1}^{n}i^2f(i)\ &=sumlimits_{i=1}^{n}isumlimits_{d|i}mu(d)10^{frac{i}{d}}\ &=sumlimits_{d=1}^{n}mu(d)sumlimits_{i=1}^{lfloorfrac{n}{d} floor}id10^{i}\ &=sumlimits_{d=1}^{n}mu(d)dsumlimits_{i=1}^{lfloorfrac{n}{d} floor}i10^{i}\ end{aligned}]

然后前面的部分捏成函数杜教筛分块然后后面直接(O(1))计算就可以了。
将一下怎么筛和怎么算。
我们要求函数:

[F(n)=mu(n)n ]

的前缀和:

[S(n)=sumlimits_{i=1}^{n}F(n) ]

考虑如何构造卷积,我们发现乘上的系数让人十分不爽,考虑卷标志函数然后消去他。

[F*id=sumlimits_{d|n}mu(d)dfrac{n}{d}=sumlimits_{d|n}mu(d)=e ]

那么也就是说:

[egin{aligned} sumlimits_{i=1}^{n}e(i)&=sumlimits_{i=1}^{n}sumlimits_{d|i}mu(frac{n}{d})frac{n}{d}d\ &=sumlimits_{d=1}^{n}dsumlimits_{i=1}^{frac{n}{d}}mu(i)i\ &=sumlimits_{d=1}^{n}dS(frac{n}{d})\ S(n)&=sumlimits_{i=1}^{n}[i=1]-sumlimits_{d=2}^{n}dS(frac{n}{d})\ &=1-sumlimits_{d=2}^{n}dS(frac{n}{d})\ end{aligned}]

这样就可以直接杜教筛了。
然后考虑后面的部分。
我们设:

[G(n)=sumlimits_{i=1}^{n}i10^i ]

[egin{aligned} G(n)-10G(n)&=sumlimits_{i=1}^{n}i10^i-sumlimits_{i=2}^{n+1}(i-1)10^i\ -9G(n)&=sumlimits_{i=2}^{n}10^i+10-n10^{n+1}\ -9G(n)&=sumlimits_{i=1}^{n}10^i-n10^{n+1}\ G(n)&=frac{n10^{n+1}-sumlimits_{i=1}^{n}10^i}{9}\ &=frac{10frac{10^n-1}{10-1}-n10^{n+1}}{9} end{aligned}]

这样就可以直接算出来了。

(H)的染色
不知道为什么突然换题然后换上来一个谁也不会的多项式神题(@fACe)
好吧理解了的话还是挺简单的。
先了解一下拉格朗日插值 https://www.cnblogs.com/Lrefrain/p/12158685.html
然后这道题我花了一个小时才发现给的不是系数表达式而是点值表达式。
心态炸了。
然后快速回忆拉格朗日插值,强行(yy)出了式子,然后有快速(yy)出一种插出系数表达式的方法。
才成功骗到(35),考后得知暴力高斯消元也是(35)。。。
然后这个题其实没有那么麻烦。
我们要求的是:

[sumlimits_{i=0}^{n-m}(inom{n-i}{m}^2-inom{n-i-1}{m}^2)F(i) ]

前后形式一样,算两个然后差分就可以了。
其中(F(i))表示点值表达式。
然后:

[inom{n-x}{m}^2=frac{(n-x)^{underline{m}}}{m}^2 ]

这样的话这个东西就是(2m)次的,然后(F(x)inom{n-x}{m}^2)(3m)次。
然后求和得到的。

[Ans(i)=sumlimits_{x=0}^{i}inom{n-x}{m}^2F(x)$$是$3m+1$次的。 我们利用拉格朗日插值的话就可以求出$[0,3m+1]$处的$F(x)$的点值了,因为给出的点值是连续的且从1开始。 我们就会得到这样一个卷积式子: $$F(x_0)=sumlimits_{i=0}^{n}frac{y_i}{x_0-i}prodlimits_{j=0}^{n}frac{x_0-j}{i-j}]

这样我们先不管(prodlimits_{j=0}^{n}x_0-j)
那么式子就变成这样了:

[F(x_0)=x_0^{underline{n}}sumlimits_{i=0}^{n}frac{y_i}{(x_0-i)(-1)^{m-i}i!(m-i)!} ]

这样的话就可以直接用(NTT)优化插值了(做长度为100w可真是丧心病狂啊)。
然后剩下的部分就简单了。
我们再次利用构造插值函数:

[Ans(i)=sumlimits_{x=0}^{i}(inom{n-x}{m})^2F(x) ]

然后利用刚才插值出来的(3m+1)个点值计算得到(iin[0,3m+1])(Ans(i))的点值。
这样的话就可以再次插值插出:(Ans(n-m))了。
然后再求出(Ans(n-m-1))相减即可。

原文地址:https://www.cnblogs.com/Lrefrain/p/12150053.html