因为没做过数学题。
所以打算先随便找+做几个简单数学题,再写题解,过段时间再讲。
另:由于我之前讲的数学题难度太大,被多人联名怒喷,广受差评,所以这次的难度大大降低,题太水。
做过的大佬不要大声喷或喊题解,没做过的神秒切不要说题真太水。
本来计划弄10个题,由于本人水平有限,这段时间内过于颓废,所以只做了8个题。
\(T1\)
\(CF438E\ The\ Child\ and\ Binary\ Tree\)
有一个大小为\(n\)的集合\(S\)问所有点权都在集合中,并且点权之和分别为\([1,m]\)的二叉树的个数。
\(n,m<=10^5\)
设\(f(i)\)为权值和\(i\)的二叉树个数,\(c(i)\)为权值集合中是否存在\(i\)。
那么有:
\[f(n)=\sum\limits_{i=1}^{m}c(i)\sum\limits_{j=0}^{n-i}f(j)f(n-i-j)
\]
由于\(f(0)=1\)
设\(\{f\},\{c\}\)生成函数分别是\(F(x),C(x)\)
所以:
\[F(x)=F(x)F(x)C(x)+1
\]
解得:
\[F(x)=\frac{2}{1(+/-)\sqrt{1-4C(x)}}
\]
然后考虑符号变化。
当\(\lim\limits_{x\rightarrow 0}\)的时候,\(F(x)\rightarrow f(0)\)
那么当符号是正好的时候才存在这个结果,所以舍去负号。
那么我们做一个多项式开根和求逆就好了。
\(T2\)
UOJ#62 [UR #5] 怎样跑得更快
\(nq\leq 10^5\)
其实这个题就是猛推式子。
\[\begin{aligned}
b_i&\equiv \sum\limits_{j=1}^{n}(i,j)^c[i,j]^ex_j\\
&\equiv \sum\limits_{j=1}^{n}(i,j)^{c-e}i^ej^ex_j\\
&\equiv i^e\sum\limits_{d|i}d^{c-e}\sum\limits_{d|j}j^ex_j[\frac{(i,j)}{d}=1]\\
&\equiv i^e\sum\limits_{d|i}d^{c-e}\sum\limits_{d|j}j^ex_j\sum\limits_{g|\frac{(i,j)}{d}}\mu(g)\\
&\equiv i^e\sum\limits_{d|i}d^{c-e}\sum\limits_{d|j}j^ex_j\sum\limits_{T|(i,j)}\mu(\frac{T}{d})\\
&\equiv i^e\sum\limits_{T|i}\sum\limits_{T|j}j^ex_j\sum\limits_{d|T}\mu(\frac{T}{d})d^{c-e}\\
&\equiv i^e\sum\limits_{T|i}\sum\limits_{T|j}j^ex_jf(T)\\
&\equiv i^e\sum\limits_{T|i}f(T)g(T)\\
&\equiv i^e\sum\limits_{T|i}F(T)\\
\frac{b_i}{i^e}&\equiv \sum\limits_{T|i}F(T)\\
F(n)&\equiv \sum\limits_{n|i}\mu(\frac{i}{n})\frac{b_i}{i^e}
\end{aligned}
\]
这就完事了。
一个反演解决了。
\(T3\)
UOJ#310. 【UNR #2】黎明前的巧克力
\(n\leq 10^6,a_i\leq 10^6\)
这个题可以直接转化题意。
变成对于一个可重集合\(S\),选择其\(xor\)和为\(0\)的子集\(T\),那么这个子集对答案的贡献就是\(2^{|T|}\)。
那么我们可以搞一个集合幂级数二项式来当生成函数用。
那么每个元素的生成函数就是\((1+2x^{a_i})\)。
每个都\(FWT\)一次复杂度太高了。
考虑\(FWT\)的式子。
设\(i\)的二进制位上\(1\)的个数为\(d(i)\)。
那么有:
\[c_i=\sum\limits_{j}(-1)^{d(i\&j)}b_j
\]
那对于系数来说,1的贡献是1,2的贡献是\((+/-)2\)这怎么弄呢,那么一个多项式的贡献不是\(-1\)就是\(3\)?
考虑把这些多项式求和再\(FWT\)。
这样每个位置得到的答案就是:
\[(-1)x+3(n-x)=f_i
\]
这样可以解出来每个位置的\(-1\)的个数。
真实的系数就是:
\[c_i=(-1)^x3^{n-x}
\]
我们再给他\(IFWT\)回去就行。
注意去掉空集的方案。
\(T4\)
\(THUPC2017\ findtree\)
事实上我们要求的就是每一种权值的方案数是否为0.
怎么做?
首先我们发现不能拆位来做。
就很恶心。
否则可以直接做矩阵树定理来求这个东西。
我们其实仍然可以拆位来做。
用\(exFWT\)来把每一位拆成点值。
然后直接用变元矩阵树定理处理这个桶,求出每一个位置应当有的权值。
这相当于对所有的点值做一个树形乘法。
正好符合点值对位相乘的性质。
得到的新桶我们在\(exIFWT\)回来就得到了最终的方案数数组。
\(exFWT\)的用法是在每一位可以用不同的位运算来计算。
只需要在不同的位用不同的\(FWT\)计算方法就可以。
正确性显然。
\(T5\)
\(NOI2016\)循环之美
这个题作为\(NOI\)的题目总体还算中规中矩。
话说\(NOI\)的题目,结论题几乎都有提示欸。
这个提示的意思大概就是说在做除法的时候存在这样的事情:
\[xK^l\equiv x(mod\ y)
\]
就是说余数在\(l\)次后重新出现。
那么有:
\[K^l\equiv 1(mod\ y)
\]
根据欧拉定理来说,有\(\varphi(y)|l,(K,y)=1\).
同时由于是数值上互不相等,那么可以认为\(\frac{x}{y}\)为最简分数形式。
那么可以大胆地列出最终答案的表达式:
\[ans=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[(i,j)=1][(j,K)=1]
\]
剩下就是无聊的推式子环节了,不过也有几步惊心动魄的操作地说:
\[\begin{aligned}
ans&=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[(i,j)=1][(j,K)=1]\\
&=\sum\limits_{j=1}^{m}[(j,K)=1]\sum\limits_{i=1}^{n}[(i,j)=1]\\
&=\sum\limits_{j=1}^{m}[(j,K)=1]\sum\limits_{i=1}^{n}\sum\limits_{d|(i,j)}\mu(d)\\
&=\sum\limits_{d=1}^{min(n,m)}[(d,K)=1]\mu(d)\lfloor\frac{n}{d}\rfloor\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}[(jd,K)=1]\\
f(n,K)&=\sum\limits_{d=1}^{n}[(d,K)=1]\mu(d)\\
&=\sum\limits_{d=1}^{n}\mu(d)\sum\limits_{g|(d,K)}\mu(g)\\
&=\sum\limits_{g|K}\mu(g)\sum\limits_{d=1}^{\lfloor\frac{n}{d}\rfloor}\mu(d)\\
&=\sum\limits_{g|K}\mu^2(g)\sum\limits_{d=1}^{\lfloor\frac{n}{g}\rfloor}\mu(d)[(d,g)=1]\\
&=\sum\limits_{g|K}\mu^2(g)f(\lfloor\frac{n}{g}\rfloor,g)\\
g(n)&=\sum\limits_{i=1}^{n}[(i,K)=1]\\
&=\lfloor\frac{n}{K}\rfloor g(K)+g(K-\lfloor\frac{n}{K}\rfloor K)\\
\end{aligned}
\]
这样一边预处理快速查询,一边直接杜教筛就行了。
\(T6\)
\([Luogu3768]\)简单的数学题
这个题用到一些欧拉函数的套路。
推一波式子就出来了:
\[\begin{aligned}
ans&=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ij(i,j)\\
&=\sum\limits_{d=1}^{n}d^3\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{d}\rfloor}ij[(i,j)=1]\\
&=\sum\limits_{d=1}^{n}d^3\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{d}\rfloor}ij\sum\limits_{g|(i,j)}\mu(g)\\
&=\sum\limits_{d=1}^{n}d^3\sum\limits_{g=1}^{\lfloor\frac{n}{d}\rfloor}\mu(g)g^2sum^2(\lfloor\frac{n}{dg}\rfloor)\\
&=\sum\limits_{T=1}^{n}sum^2(\lfloor\frac{n}{T}\rfloor)\sum\limits_{d|T}d^3(\frac{T}{d})^2\mu(\frac{T}{d})\\
&=\sum\limits_{T=1}^{n}sum^2(\lfloor\frac{n}{T}\rfloor)T^2\sum\limits_{d|T}d\mu(\frac{T}{d})\\
&=\sum\limits_{T=1}^{n}sum^2(\lfloor\frac{n}{T}\rfloor)T^2\varphi(T)\\
f(n)&=n^2\varphi(n)\\
S(n)&=\sum\limits_{i=1}^{n}f(i)\\
g(n)&=n^2\\
h(n)&=n^3\\
f*g&=h\\
S(n)&=\sum\limits_{i=1}^{n}i^3-\sum\limits_{d=2}^{n}d^2S(\lfloor\frac{n}{d}\rfloor)\\
\end{aligned}
\]
这就完事了。
\(T7\)
堪破神机
考虑\(m=2\)的时候,设方案数为\(f_i\)那么其实\(\{f\}\)就是斐波那契数列。
这样我们求一下这个数列的特征根。
\[x^2=x+1
\]
这样有:
\[\alpha=\frac{1+\sqrt{5}}{2},\beta=\frac{1-\sqrt{5}}{2}
\]
我们知道特征根可以用于表示线性递推数列。
\[f_n=A\alpha^n+B\beta^n
\]
代入前几项解得:
\[f_n=\frac{1}{\sqrt{5}}\alpha^n-\frac{1}{\sqrt{5}}\beta^n
\]
那么有:
\[\begin{aligned}
ans&=\sum\limits_{i=L}^{R}\binom{f_i}{K}\\
&=\frac{\sum\limits_{i=L}^{R}f_i^{\underline{K}}}{K!}\\
&=\frac{1}{K!}\sum\limits_{i=L}^{R}\sum\limits_{k=0}^{K}(-1)^{K-i}\begin{bmatrix}K\\i\end{bmatrix}f_i^k\\
&=\frac{1}{K!}\sum\limits_{k=0}^{K}(-1)^{K-i}\begin{bmatrix}K\\i\end{bmatrix}\sum\limits_{i=L}^{R}f_i^k\\
&=\frac{1}{K}\sum\limits_{k=0}^{K}(-1)^{K-i}\begin{bmatrix}K\\i\end{bmatrix}\sum\limits_{i=L}^{R}(A\alpha^i-B\beta^i)^k\\
&=\frac{1}{K}\sum\limits_{k=0}^{K}(-1)^{K-i}\begin{bmatrix}K\\i\end{bmatrix}\sum\limits_{i=L}^{R}\sum\limits_{j=0}^{k}\binom{k}{j}(A\alpha^i)^j(B\beta^i)^{k-j}\\
&=\frac{1}{K}\sum\limits_{k=0}^{K}(-1)^{K-i}\begin{bmatrix}K\\i\end{bmatrix}\sum\limits_{j=0}^{k}\binom{k}{j}A^jB^{k-j}\sum\limits_{i=L}^{R}\alpha^{ij}\beta^{i(k-j)}\\
\end{aligned}
\]
那我们搞个扩域就行了。
直接设个\(i=\sqrt{5}\)
然后做一些复数运算最终就可以求到答案了。
上面那个式子的话后面的部分由于可以直接搞等比数列求和。
所以复杂就是\(O(K^2logn)\)的。
再来考虑\(m=3\)的情况。
设方案为\(g_i\)。
那么有:
这样的话数列的式子呼之欲出了。
\[g_i=g_{i-1}+2\sum\limits_{j=0}^{i-1}g_{j}
\]
然后错位相减一下。
\[g_{i}-g_{i-1}=g_{i-1}+2\sum\limits_{j=0}^{i-1}g_j-g_{i-2}-2\sum\limits_{j=0}^{i-2}g_j=3g_{i-1}-g_{i-2}
\]
所以:
\[g_i=4g_{i-1}-g_{i-2}
\]
同样可以搞个特征方程出来。
\[x^2=4x-1
\]
那么解得:
\[\alpha=\frac{4+\sqrt{8}}{2}=2+\sqrt{3},\beta=2-\sqrt{3}
\]
仍然可以求出\(A,B\),略。
这样我们其实直接代入\(i=\sqrt{3}\)就可以了。
仍然可以用上面的方法再做一次。
这个题,出题人强行多合一。
\(T8\)
这个应该是那个斯特林反演的题,貌似是叫异或图来着,久闻大名了。
首先枚举一些划分情况\(A\),表示将集合中的点划分为多个子集,每个子集大小为\(a_i\),总共有\(|A|\)个子集。
设\(g_A\)为将点集划分成\(A\)的情况,不同集合必然没有连边,相同集合可能有所连边的方案,\(f_A\)为恰好把点集分成\(A\)的方案。
这样可以用斯特林反演容斥出来\(f\),问题转化为求\(g\)。
求\(g\)是这个题的难点。
那么也就是说对于每条确定了的边都可以列出一个\(xor\)方程。
这样其实维护一下线性基的大小就可以了,设这个大小为\(k\),那就是确定了\(k\)个图的了,那么总的符合这种情况的子集个数就是\(2^{m-k}\)。
把\(A\)按照\(|A|\)搞个占位多项式。
这样我们最后玩个斯特林反演就可以了:
\[g_m=\sum\limits_{i=m}^{n}\begin{Bmatrix}i\\m\end{Bmatrix}f_i
\]
\[f_m=\sum\limits_{i=m}^{n}(-1)^{i-m}\begin{bmatrix}i\\m\end{bmatrix}g_i
\]
求个\(g_1\)就完事了。