专栏文章

题解:P8557 炼金术(Alchemy)

P8557题解参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@miplc09o
此快照首次捕获于
2025/12/03 13:52
3 个月前
此快照最后确认于
2025/12/03 13:52
3 个月前
查看原文

形式化题意

给定 n,kn, k,求出:
{(S1,S2,,Sk)|i=1kSi=[n]}mod998244353\left| \left\{ (S_1,S_2,\dots,S_k) \,\middle|\, \bigcup_{i=1}^{k} S_i = [n] \right\} \right| \bmod 998244353
1n,k1091 \leq n, k \leq 10^9

形式化思路

考虑重新刻画问题,设:
i[n],Ai={(S1,,Sk)(j[k],  Sj[n])(j[k]:iSj)}\forall\, i \in [n],\quad A_i = \Bigl\{ (S_1,\dots,S_k) \,\Bigm|\, \bigl(\forall\, j\in [k],\; S_j \subseteq [n]\bigr) \land \bigl(\exists\, j\in [k] : \, i \in S_j\bigr) \Bigr\}
那么要求的即:
i=1nAimod998244353\left| \bigcap_{i=1}^{n} A_i \right| \bmod 998244353
以交集的角度并不方便计算,考虑容斥,已知全集的每个子集的补集的交集推出全体的交集,即:
i=1nAi=J[n](1)JjJ(Aj)c,\left|\bigcap_{i=1}^{n} A_i\right| = \sum_{J\subseteq [n]} (-1)^{|J|} \left|\bigcap_{j\in J} (A_j)^c\right|,
考虑此处 jJ(Aj)c\bigcap_{j\in J} (A_j)^c 的意义:
jJ(Aj)c={(S1,,Sk)([k],  S[n])(jJ,  [k],  jS)}.\bigcap_{j\in J}(A_j)^c = \Bigl\{ (S_1,\dots,S_k) \,\Bigm|\, \left(\forall\, \ell \in [k],\; S_\ell \subseteq [n]\right) \land \left(\forall\, j \in J,\; \forall\, \ell \in [k],\; j \notin S_\ell\right) \Bigr\}.
不难发现以下命题成立:
([k],  S[n]J)    (([k],  S[n])(jJ,  [k],  jS)).\Bigl( \forall\, \ell \in [k],\; S_\ell \subseteq [n]\setminus J \Bigr) \iff \Bigl( \bigl(\forall\, \ell \in [k],\; S_\ell \subseteq [n]\bigr) \land \bigl(\forall\, j \in J,\; \forall\, \ell \in [k],\; j\notin S_\ell\bigr) \Bigr).
因此有:
jJ(Aj)c=(2nJ)k=(2k)(nJ)\left|\bigcap_{j\in J}(A_j)^c\right| = \left(2^{n-|J|}\right)^k = ({2^k})^{\left( n-|J| \right)}
注意到一个子集的贡献只与该集合大小有关,因此有:
i=1nAi=i=0n(ni)(2k)ni(1)i\left| \bigcap_{i=1}^{n} A_i \right| = \sum_{i=0}^{n} \binom{n}{i} (2^k)^{n-i} (-1)^i
直接计算可获得 60 分;根据二项式定理可得:
i=0n(ni)(2k)ni(1)i=(2k1)n\sum_{i=0}^{n} \binom{n}{i} (2^k)^{n-i} (-1)^i = (2^k-1)^n
用快速幂直接计算即可,时间复杂度为 Θ(logk+logn)\Theta(\log k + \log n),空间复杂度为 Θ(1)\Theta(1)

评论

2 条评论,欢迎与作者交流。

正在加载评论...