2024.11.14 NOIP训练赛

2024.11.14 NOIP 训练赛

Problem

对满足以下条件的 01 矩阵 \(A\) 计数:

  • 行数为 \(n+1\) (从 \(0\)\(n\) 标号),列数为 \(k\) (从 \(1\)\(k\) 标号);
  • 不存在使得 \(A_{0,i} \sim A_{n-1,i}\)\(n\) 个数都为 \(1\) 的列 \(i\)
  • 存在使得 \(A_{1,i} \sim A_{n,i}\)\(n\) 个数都为 \(0\) 的列 \(i\)

$ \mathcal {O}(nk)$ 做法

先考虑 \(1 \sim n-1\)\(n\) 列。

枚举有 \(i\) 列全填 \(0\)\(j\) 列全填 \(1\),有 \(C_{k}^iC_{k-i}^j\) 种选择;

考虑第 \(0\) 行,全填 \(1\) 的列只能填 \(0\),其他任选,有 \(2^{k-j}\) 种选择;

考虑第 \(n\) 行,没有全填 \(0\) 的列可以任选,全填 \(0\) 的列必须在第 \(n\) 行再填一个 \(0\),有 \(2^{k-i}\times (2^i-1)\) 种选择。

根据乘法原理,可以 \(O(nk)\) 地计算答案。

\(\mathcal{O}(\log n+\log k)\) 做法

利用二项式定理化简答案式子:

\[\begin{aligned}&\quad \sum_{i=0}^k\sum_{j=0}^{k-i} C_k^i \cdot C_{k-i}^j \cdot (2^{n-1}-2)^{k-i-j} \cdot 2^{k-j} \cdot 2^{k-i} \cdot (2^i-1) \\&= \sum_{i=0}^k C_{k}^i \cdot 2^{k-i} \cdot (2^i-1) \cdot \sum_{j=0}^{k-i} C_{k-i}^j \cdot 2^{k-j} \cdot (2^{n-1}-2)^{k-i-j} \\&= \sum_{i=0}^k C_k^i \cdot 2^{k-i} \cdot (2^i-1) \cdot 2^i \cdot \sum_{j=0}^{k-i} C_{k-i}^j \cdot 2^{k-i-j} \cdot (2^{n-1}-2)^{k-i-j}\\&= 2^k \sum_{i=0}^k C_k^i \cdot (2^i-1) \cdot \sum_{j=0}^{k-i} C_{k-i}^j \cdot (2^n-4)^{k-i-j}\\&= 2^k \sum_{i=0}^k C_k^i \cdot (2^i-1) \cdot (2^n-3)^{k-i} \\&= 2^k [\sum_{i=0}^k C_k^i \cdot 2^i \cdot (2^n-3)^{k-i}-\sum_{i=0}^k C_k^i \cdot (2^n-3)^{k-i}]\\&= 2^k [(2^n-1)^k-(2^n-2)^k]\end{aligned} \]

posted @ 2024-11-14 17:15  XP3301_Pipi  阅读(6)  评论(0编辑  收藏  举报
Title