The 1st Universal Cup 部分题解
Stage 8. Slovenia
F. Differences
-
设 S j , i S_{j,i} Sj,i 表示第 j j j 个字符串第 i i i 个字符; f i , c f_{i,c} fi,c 表示一个 N N N 维 0 / 1 0/1 0/1 向量,第 j j j 维 0 / 1 0/1 0/1 表示 S j , i S_{j,i} Sj,i 是否为 c c c;则若第 j j j 个字符串符合条件,需要满足:
∑ 1 ≤ i ≤ M ∑ c ≠ S j , i f i , c = ( K , … , K , 0 , K , … , K ) (除第 j 个位置为 0 外其余位置为 K 的 N 维向量) \\sum\\limits_{1\\le i\\le M}\\sum\\limits_{c\\not = S_{j,i}} f_{i,c} = (K,\\dots,K,0,K,\\dots ,K)(除第 j 个位置为 0 外其余位置为 K 的 N 维向量) 1≤i≤M∑c=Sj,i∑fi,c=(K,…,K,0,K,…,K)(除第j个位置为0外其余位置为K的N维向量) -
将 N N N 维向量的第 k k k 维用 p k p^k pk 哈希即可实现快速相加,时间复杂度 O ( N M ) \\mathcal O(NM) O(NM)。
-
Code
K. Skills in Pills
- 显然应当尽可能晚地吃药,主要需要解决冲突的问题。
- 容易通过调整法证明,冲突时只需要将其中一人吃药时间向前推一天即可,即一定不劣于向前推更多天的方案。
- 因而可以设 f i , 0 / 1 f_{i,0/1} fi,0/1 表示冲突时在第 i i i 天吃药 A / B A/B A/B、前一天在吃另一种药所需的最少药片数,转移即找到下一次冲突的位置,不难发现每次的转移是本质相同的,可通过预处理 O ( 1 ) \\mathcal O(1) O(1) 转移。
- 时间复杂度 O ( n ) \\mathcal O(n) O(n)。
- Code
Stage 12. Ōokayama
G. Range NEQ
- 考虑容斥原理,假设对于 0 ≤ i < N 0 \\le i < N 0≤i<N,恰有 k i ( 0 ≤ k i ≤ M ) k_i(0\\le k_i \\le M) ki(0≤ki≤M) 个 j j j 满足 i M ≤ j < ( i + 1 ) M iM \\le j < (i + 1)M iM≤j<(i+1)M, ⌊ j M ⌋ = ⌊ P j M ⌋ \\lfloor \\frac{j}{M} \\rfloor = \\lfloor \\frac{P_j}{M} \\rfloor ⌊Mj⌋=⌊MPj⌋,不难得到总的方案数:
∑ 0 ≤ k 0 , k 1 , … , k N − 1 ≤ M ( − 1 ) ∑ 0 ≤ i < N k i ( N M − ∑ 0 ≤ i < N k i ) ! ∏ 0 ≤ i < N C M k i A M k i \\sum \\limits_{0\\le k_0,k_1,\\dots,k_{N-1}\\le M} (-1)^{\\sum \\limits_{0\\le i < N}k_i}(NM-\\sum \\limits_{0\\le i < N}k_i)!\\prod\\limits_{0\\le i < N}C_{M}^{k_i}A_{M}^{k_i} 0≤k0,k1,…,kN−1≤M∑(−1)0≤i<N∑ki(NM−0≤i<N∑ki)!0≤i<N∏CMkiAMki - 对于对应 N N N 元组为 ( k 0 ′ , k 1 ′ , … , k N − 1 ′ ) (k'_0,k'_1,\\dots,k'_{N - 1}) (k0′,k1′,…,kN−1′) 的方案,考虑其被计入的次数,故容斥是正确的:
∏ 0 ≤ i < N ∑ 0 ≤ k ≤ k i ′ ( − 1 ) k C k i ′ k = ∏ 0 ≤ i < N [ k i ′ = 0 ] \\prod \\limits_{0\\le i < N}\\sum \\limits_{0 \\le k \\le k'_i}(-1)^{k}C_{k'_i}^k=\\prod\\limits_{0 \\le i < N}[k'_i =0] 0≤i<N∏0≤k≤ki′∑(−1)kCki′k=0≤i<N∏[ki′=0] - 将组合数展开,设多项式:
F ( x ) = ∑ k = 0 M ( M ! ) 2 ( ( M − k ) ! ) 2 k ! ( − x ) k F(x) = \\sum \\limits_{k=0}^{M}\\frac{(M!)^2}{((M-k)!)^2k!}(-x)^k F(x)=k=0∑M((M−k)!)2k!(M!)2(−x)k - 则答案可以表示为:
∑ k = 0 N M ( N M − k ) ! [ x k ] F N ( x ) \\sum \\limits_{k=0}^{NM}(NM-k)![x^k]F^N(x) k=0∑NM(NM−k)![xk]FN(x) - 做多项式快速幂即可,时间复杂度 O ( N M log ( N M ) ) \\mathcal O(NM\\log(NM)) O(NMlog(NM))。
- Code