Math

1.FWT

1.https://ac.nowcoder.com/acm/contest/5667/E
对于\(i≤19\)每次用卷积异或算答案
对于\(i\geq20\)\(ans[i] = ans[i - 2]\)
时间复杂度\(o(n + w\log^2w)\)

2.置换群

1.https://ac.nowcoder.com/acm/contest/5670/E
题目等价于求置换群的最小循环节,即为每个圈的\(lcm\)
实测NTT + 启发式合并 68ms

3.生成函数

1.https://ac.nowcoder.com/acm/contest/5670/C
\(∏min(𝑎𝑖,𝑏𝑖)\)等于满足 \(𝑐𝑖≤min(𝑎𝑖,𝑏𝑖)\)\(𝐶\) 数组的个数。
不妨枚举\(\sum 𝑐𝑖=𝑜\) , 我们尝试构造 \(𝑎′𝑖=𝑎𝑖−𝑐𝑖\)\(𝑏′𝑖=𝑏𝑖−𝑐𝑖\) .
显然对于每一个不同的 𝑎′,𝑏′数组, 𝑐 都能产生贡献。
也就是说这一部分的答案是这三个数组的方案数相乘。
卡常卡了我1小时差评
时间复杂度\(O(T \times N)\)
2.http://acm.hdu.edu.cn/showproblem.php?pid=6796
枚举高位,剩下的数字每个数字都有一个上限,枚举d出现次数用指数型生成函数计算对应方案数
复杂度\(O(T \times18 ^ 4 \times10)\)

4.组合数学

1.https://ac.nowcoder.com/acm/contest/5671/A
\(f(n)=\sum_{i=2}^{n}\frac{C_{n}^{i} \times (i-1)!\times (n-i)!\times f(i)}{n!}+n\)
化简完\(f(n)=\sum_{i=2}^{n}\frac{f(i)}{i}+n\)
维护前缀和即可
复杂度\((o(n\times\ logn))\)

5.数论分块

1.https://ac.nowcoder.com/acm/contest/5672/H
\(\frac{(n - 1)}{k}\)\(\frac{n}{ k}\)分别作数论分块
时间复杂度\(O(\sqrt(k))\)

6.prufer序列

1.http://codeforces.com/problemset/problem/1109/D.
设Tn,k 为n个有标号点分成k个联通块的分割种数,其中节点1,2,3,...k属于不同联通块

\[T\sim n,k\sim=k\times n ^{ n - k - 1} \]

2.https://ac.nowcoder.com/acm/problem/210245.
\(f(i)\)\(i\)个点组成一棵生成树的贡献有:

\[f(i)=i\times\sum_{j=1}^{i-1}C_{i -1}^j\times j^3 \times (i-1)^{i-2-j} \]

\(g(i)\)\(i\)个点组成森林的方案数有:

\[g(i) = {i}^{(i - 2)} +\sum_{j = 1} ^{i - 1}C_{i - 1}^{j - 1}\times{j}^{(j - 2)}\times g(i - j) \]

\(dp(i)\)为答案为\(i\)个点尝试的贡献有:

\[dp(i) = f(i) +\sum_{j = 1}^{i - 1}C_{i - 1}^{j - 1}\times{f(j)\times g(i - j) + {j}^{(j - 2)}\times dp(i - j)} \]

复杂度O(n^2)
使用生成函数\(fft\)可优化至\(O(n\log n\log n)\)

7.同余

1.https://codeforces.com/contest/1389/problem/E
依题意有\((x - y)\times(d - 1)\equiv0(modw)\).我们令\(w_1=\frac{w}{gcd(w, d - 1)}\)
可以得到\(ans =\sum_{i = 1}^{\frac{min(d, m)}{w_1}}m\times n - i \times w_1\)
时间复杂度\(O(T\times\log(w + d))\)

8.polya计数

1.https://ac.nowcoder.com/acm/contest/5673/D
待补据说是一个神仙数学题

9.线性基

1.http://acm.hdu.edu.cn/showproblem.php?pid=6823
我们记由\(f(x) = 0\)生成的解空间为\(M\)
\(a_{1,2,...m}\)\(M\)的基,\(a_{m+1,m+2,...,m+k}\)\(S-M\)的基
由题目中的三个条件我们可以推出,当且仅当\(m = k\)时存在某种构造方式。我们只需令\(f(a_i) = 0,f(a_{i+m}) = a_i,i=1,2,..,m\)即可。
那么我们如何检验构造是否正确呢。
对于\(f(x) != 0\)时,我们记\(f(x) = y\)我们可以得到\(f(y) = 0\)
我们可以将\(f(x) x\)放在增广矩阵进行高斯消元,如果得到了\(f(0) = 0\)的情况,显然构造一定是错误的。
考虑\(M\)部分。
我们分离出所有令\(f(x_i) = 0\)\(x_i\),则由\(x_i\)生成的子空间的基底不应超过m。
同理可考虑\(S-M\)部分。
code
时间复杂度\(O(T\times62)\)

10.莫比乌斯反演

1.http://acm.hdu.edu.cn/showproblem.php?pid=6833

题意

\[\sum_{a_1=1}^{n}\cdots \sum_{a_x=1}^{n} \prod_{j=1}^x a_j^k \cdot f(\gcd(a_1,\cdots ,a_x))\gcd(a_1,\cdots ,a_x) \]

其中 \(f(x)=|\mu(x)|\)

思路

\(d = gcd(a_1,\cdots ,a_x)\)

\[\sum_{d=1}^n f(d)\cdot d \cdot d^{xk} \sum_{a_1=1}^{n/t}\cdots \sum_{a_x=1}^{n/t} \prod_{j=1}^x a_j^k \cdot [d ==1]\\ =\sum_{d=1}^n f(d) \cdot d^{xk + 1} g(n/d) \]

其中

\[g(n)=\sum_{a_1=1}^{n}\cdots \sum_{a_x=1}^{n} \prod_{j=1}^x a_j^k \cdot [d==1]\\ \]

代入反演公式 \([d==1]=\sum_{i|d}\mu(i)\) 得:

\[g(n)=\sum_{i=1}^n \mu(i)\cdot i^{xk} \sum_{a_1=1}^{n/i}\cdots \sum_{a_x=1}^{n/i} \prod_{j=1}^x a_j^k\\ =\sum_{i=1}^n \mu(i)\cdot i^{xk} h(n/i) \]

其中

\[h(n)=\sum_{a_1=1}^{n}\cdots \sum_{a_x=1}^{n} \prod_{j=1}^x a_j^k\\ =(\sum_{i=1}^n i^k)^x \]

\(h函数可以预处理,g函数可以数论分块.记忆化可过\)

11.矩阵树定理

1.http://acm.hdu.edu.cn/showproblem.php?pid=6836

题意

\(给你一张有n个点m条边的图,定义权值为生成树边的与,求任取一棵生成树的权值的数学期望\)

思路

\(将边权按位拆开,生成树边的与为一即为该生成树所有边权为1,我们可以把边权是否为1定义该生成树是否联通,跑矩阵树定理求得的生成树个数即为权值\)

posted @ 2020-09-11 22:15  清风以宁和  阅读(120)  评论(0编辑  收藏  举报