32k的数数记录

写在前面

这玩意没有顺序,大致按难度排序。
没有毒瘤多项式科技!!
里面全部是幼儿园数数题,老年选手也可颐养身心。

正文——数数

1. 「Luogu2012」拯救世界2

  • 题意:......
  • 做法:
    由于不是组合,所以不能够用 OGF,于是我们考虑 EGF。
    对于 A,C,G,T 四种: \(G_1(i)=\sum\limits_{i=0}^{\infty}\frac{x^i}{i!}=e^x\)
    对于乾、坎、艮、震: \(G_2(i)=\sum\limits_{i=0}^{\infty}\frac{x^{2i}}{(2i)!}=\frac{1}{2}(e^x+e^{-x})\) (\(e^{-x}=\sum\limits_{i=0}^{\infty}\frac{(-1)^ix^i}{i!}\),两个相加即可抵消奇数)。
    剩下那种: \(G_3(i)=\sum\limits_{i=0}^{\infty}\frac{x^{2i+1}}{(2i+1)!}=e^x-G_2(x)=\frac{1}{2}(e^x-e^{-x})\)
    于是:

\[\begin{aligned}G(x)&= (G_1(x)G_2(x)G_3(x))^4\\&=(\frac{1}{4}e^x(e^x+e^{-x})(e^x-e^{-x}))^4\\&=\frac{1}{2^8}(e^{3x}-e^{-x})^4\\&=\frac{1}{2^8}(e^{12x}-4e^{8x}+6e^{4x}-4+e^{-4x})\end{aligned} \]

然后我们要求的是 \(G(x)\) 中 \(x^n\) 的系数:

\[\because e^{ax}=\sum\limits_{i=0}^{\infty}\frac{a^ix^i}{i!},[x^n]e^{ax}=\frac{a^n}{n!} \]

\[\begin{aligned}\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\therefore G(x)ans&=n![x^n]G(x)\\&=\frac{1}{2^8}(12^n-4\times8^{n}+6\times 4^{n}-4+(-1)^{n}\times4^n)\end{aligned} \]

然后这道毒瘤题还要用欧拉定理:

\[a^b\equiv a^{b\mod \varphi(p)}\mod p \]

然后我们知道 \(\varphi(10^9)=4\times10^8\)。
先取模,然后快速幂即可。
当 \(n\le 4\) 的时候由于无法计算 \(2^8\) 的逆元,所以要单独拎出来判断。

2. 「ARC096C」Everything on It

  • 题意:
    有 \(n\) 种酱。你需要若干碗拉面,满足:
    你可以在每碗拉面上放若干种酱,也可以不放,容易发现方案数为 \(O(2^n)\)。
    不能出现放的酱一样的两碗拉面。每一种酱至少在两碗拉面中加了。
    求拉面集合的方案数。答案对给定的质数取模。
    \(n\leq 3000\),时限 \(\texttt{4s}\)。
  • 做法:
    题目答案无法简单统计,于是考虑容斥,令 \(f(x)\) 为 \(x\) 个数不合法的方案数,那么答案就是 \(\sum\limits_{x=0}^{n}(-1)^xf(x)\)。
    接下来计算 \(f(x)\):
    首先选出这 \(x\) 个不合法的数,总共 \(\dbinom{n}{x}\) 种方案。
    然后设把这些数选出来后扔到 \(y\) 个集合里,因为不合法,所以每个 \(x\) 至多出现一次。每个集合互不相同,不难想到斯特林数
    但是斯特林数是必须扔进 \(y\) 集合,而根据刚刚的分析,对于每个 \(x\),我们可以选择扔或不扔。我们创建一个集合 \(y+1\) 表示所有不扔到 \(1\) 到 \(y\) 集合的 \(x\),这样对于每一个 \(x\),都必须扔到 \(1\) 到 \(y+1\) 中。又因为斯特林数要求集合非空,所以对应地创建一个 \(x+1\) 的数扔进集合 \(y+1\) 中。
    于是由斯特林数的组合意义我们知道 \(x\) 个数,扔进 \(y\) 个集合,每个 \(x\) 至多出现一次,每个集合互不相同的方案数即 \(\begin{Bmatrix}x+1\\y+1\end{Bmatrix}\) 种。
    剩下 \(n-x\) 个数,每个数选或不选可以组成 \(2^{n-x}\) 个集合,往前面的 \(y\) 个集合加有 \({(2^{n-k})}^y\) 种方案,每个集合出不出现又可以有 \(2^{2^{n-x}}\) 种方案。
    所以 \(f(x)=\dbinom{n}{x}2^{2^{n-x}}\sum\limits_{y=0}^{i}(2^{n-x})^y\begin{Bmatrix}x+1\\y+1\end{Bmatrix}\)。
    带入最初的式子,得到:

\[ans=\sum\limits_{x=0}^{n}(-1)^x\dbinom{n}{x}2^{2^{n-x}}\sum\limits_{y=0}^{i}(2^{n-x})^y\begin{Bmatrix}x+1\\y+1\end{Bmatrix} \]

\(O(n^2)\) 预处理斯特林数,\(O(n)\) 预处理阶乘、逆元、阶乘逆元,然后就可以 \(O(n^2)\) 计算答案啦!

上一篇:弦截法 解高次方程 C语言/C++


下一篇:应对那些没必要提供帮助的人