AtCoder Regular Contest 106 选做

D - Powers

给定一个长度为 (N) 的整数序列 (A),以及一个正整数 (K)

对于所有的 (1 le X le K),求出

[left(sum_{L=1}^{N-1}sum_{R=L+1}^{N}(A_L+A_R)^X ight) mod 998244353 ]

(2 le N le 2 imes 10^5)(1 le K le 300)(1 le A_i le 10^8)

3s, 1GB

[egin{aligned} & sum_{L=1}^{N-1}sum_{R=L+1}^{N}(A_L+A_R)^X \ = & sum_{L=1}^{N-1}sum_{R=L+1}^{N} sum_{k=0}^{X} inom X k A_L^k A_R^{X-k} \ = & X! sum_{L=1}^{N-1}sum_{R=L+1}^{N} sum_{k=0}^{X} frac{A_L^k}{k!} cdot frac{A_R^{X-k}}{(X-k)!} \ = & X! sum_{k=0}^{X}sum_{L=1}^{N-1}sum_{R=L+1}^{N} frac{A_L^k}{k!} cdot frac{A_R^{X-k}}{(X-k)!} \ end{aligned} ]

下面为了方便直接求 (sumlimits_{1 le L, R le N} (A_L + A_R)^X)

[egin{aligned} = & X! sum_{k=0}^{X}sum_{L=1}^{N}sum_{R=1}^{N} frac{A_L^k}{k!} cdot frac{A_R^{X-k}}{(X-k)!} \ = & X! sum_{k=0}^{X} left(sum_{L=1}^{N} frac{A_L^k}{k!} ight)left(sum_{R=1}^{N} frac{A_R^{X-k}}{(X-k)!} ight) \ = & X!sum_{k=0}^{X}B_k cdot B_{X-k} end{aligned} ]

暴力卷积即可,时间复杂度 (O(NK + K^2))

https://atcoder.jp/contests/arc106/submissions/26027655

E - Medals

(N)(0/1) 变量,第 (i) 个变量有一个参数 (A_i),表示前 (A_i) 轮它会是 (1),接下来 (A_i) 轮它会是 (0),接下来 (A_i) 轮它会是 (1)……

每轮你可以至多选择一个值为 (1) 的变量,将它的计数器 (+1)。如果这一轮所有变量都 (=0),你将不做任何操作。

至少需要多少轮,才能使每个变量的计数器都 (ge K)

(1 le N le 18)(1 le K le 10^5)(1 le A_i le 10^5)

3s, 1GB

使用二分答案,二分至少需要的轮数 (D)

(N) 个变量拆点,每个变量拆成 (K) 个点,这 (NK) 个点作为图的左部,令放 (D) 个点作为图的右部,代表 (D) 轮。如果第 (i) 个变量第 (j)(=1),那么就在两个点之间连一条边。问题转化为判定这张图存不存在完美匹配。

考虑使用 Hall 定理,即判断左部点的任意子集 (A) 是否都满足 (|A| le |Gamma(A)|)

但其实并不需要对这 (2^{NK}) 个集合都做判断,因为令 (S) 表示 (A) 所涉及到的变量集合,(Gamma(A)) 其实仅仅取绝于 (S)。这意味着,在可能的最坏情况下,(A) 要么包含了某个变量的所有 (K) 个点,要么干脆一个点都没包含,所以仅仅有 (2^N) 个有意义的 (A)

也就是说,对于每一个变量集合,我们需要判断前 (D) 轮内,有多少轮至少有一个变量的值为 (1)

可以 (O(N^2K)) 预处理一下每一天值为 (1) 的变量集合,对前 (D) 天的做一下快速 Zeta 变换就非常容易判定了。

更进一步,注意到当 (D ge 2 imes10^5 N) 时必然满足题意,所以二分上界设为 (2 imes10^5 N) 即可。

时间复杂度 (O(N^2K + 2^NN log(2 imes 10^5N)))

https://atcoder.jp/contests/arc106/submissions/26040337

F - Figures

(N) 个部件,编号为 (1, 2, cdots, N),第 (i) 个部件上有 (d_i) 个孔,孔之间是可以区分的。

(N-1) 根相同的连接棒,一根连接棒可以连接两个不同部件上的某两个孔。一个孔里最多只能插一根连接棒。

找出有多少种方案,使得仅用这 (N-1) 根连接棒,就可以连接这 (N) 个部件。

两种方案被视为不同的当且仅当存在某一对孔在第一个方案中被连接了,而在第二个方案中没有被连接。

答案对 (998244353) 取模。

(2 le N le 2 imes 10^5)(1 le d_i < 998244353)

2s, 1GB

(N) 个部件看作是一棵树,假设 (N) 个点的度数都确定了,是 (D_1, D_2, cdots ,D_N),那么它的 Prufer 序列的个数为:

[inom{N-2}{D_1 - 1, D_2 - 1, cdots, D_N - 1} ]

而一个有 (d_i) 个孔的结点,如果度数为 (D_i),那么该点的连边方案数为 (d_i^{underline{D_i}})

我们可以得到答案:

[egin{aligned} & sum_{D_1, D_2, cdots, D_N\sum D_i = 2N-2} inom{N-2}{D_1 - 1, D_2 - 1, cdots, D_N - 1} prod_{i} d_i^{underline{D_i}} \ = & sum_{D_1, D_2, cdots, D_N\sum D_i = 2N-2} (N-2)! prod_{i} frac{d_i!}{(d_i - D_i)!(D_i - 1)!} end{aligned} ]

(a_i = D_i - 1)

[sum_{a_1, a_2, cdots, a_N\ sum a_i =N - 2} (N-2)! prod_{i} frac{d_i!}{(d_i - a_i - 1)!a_i!} ]

(prod) 后面的东西构造一个生成函数 (F_k(x))

[egin{aligned} F_k(x) & = sum_{i=0}^{k} frac{k!}{(k-i-1)!i!} x^i \ & = k sum_{i=0}^{k} frac{(k-1)!}{(k-i-1)!i!} x^i \ & = k sum_{i=0}^{k} inom{k-1}{i} x^i \ & =k(1 + x)^{k - 1} end{aligned} ]

则答案可以表示为:

[egin{aligned} & (N-2)! [x^{N-2}] prod_i F_{d_i}(x) \ =& (N-2)!left(prod_{i} d_i ight) [x^{N-2}]prod_i (1+x)^{d_i - 1}\ =& (N-2)!left(prod_{i} d_i ight) [x^{N-2}] (1+x)^{sum_i(d_i - 1)}\ =& (N-2)!left(prod_{i} d_i ight) inom{sum_i(d_i - 1)}{N - 2}\ =& left(prod_{i} d_i ight) left(sum_i(d_i - 1) ight)^{underline{N - 2}} end{aligned} ]

直接计算即可,时间复杂度 (O(N))

https://atcoder.jp/contests/arc106/submissions/26058447

原文地址:https://www.cnblogs.com/syksykCCC/p/ARC106.html