Codechef November Challenge 简要题解

博客围绕多个算法问题展开,如Magical Candy Store涉及贪心算法,Scalar Product Tree通过记忆化降低复杂度,Unusual Queries建树求解,Chef and the Combination Lock用多项式插值,Panic! at the Disco用倍增解决,Red - Black Boolean Expression转对偶为最大流问题,Selecting Edges随机映射二分图后跑费用流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Magical Candy Store

不会将主动权让给对方
特殊讨论 111 的情况,剩余的贪心

Scalar Product Tree

我们通过记忆化,将复杂度降为点对个数
设每层的结点个数为 aia_iai,那么点对个数为 ∑min⁡((ai2),q)\sum \min(\binom{a_i}{2},q)min((2ai),q)
分析得到复杂度为 O(nq)\mathcal{O}(n\sqrt q)O(nq)

Unusual Queries

考虑每个点向后面第一个比它大的连边,那么会建出一棵树
每个子树的编号是连续的一段 [l,r][l,r][l,r]
我们要做的就是求出深度减去第一次跳出去的深度的最大值
rrr 所在的子树往前跳若干段,这些段子树中每个点都可以取到
我们预处理出最大值然后倍增就可以了
那么只需要对最后一棵子树单独处理,用 ST\mathcal{ST}ST 表处理最大值就可以了

Chef and the Combination Lock

fif_ifi 表示需要 ≥i\ge ii 次操作的方案数
fi=∏max⁡(0,aj+1−i×2)f_i=\prod \max (0,a_j+1-i\times 2)fi=max(0,aj+1i×2)
找到 t=min⁡(ai+1)/2t=\min (a_i+1)/2t=min(ai+1)/2
∑i=1tfi\sum_{i=1}^t f_ii=1tfi
注意到 fif_ifi 是关于 iiiNNN 次多项式
我们只需求出其 N+2N+2N+2 个点值就可以插值出 ∑i=1tfi\sum_{i=1}^tf_ii=1tfi
上一个分治 NTT\mathcal{NTT}NTT 和一个多点求值就可以了

Panic! at the Disco

∑i=0NFa+i×d×Mi=∑i=0N15(φa+id−ϕa+id)Mi\sum_{i=0}^NF_{a+i\times d}\times M^i\\=\sum_{i=0}^N\frac{1}{\sqrt 5}(\varphi^{a+id}-\phi^{a+id})M^ii=0NFa+i×d×Mi=i=0N51(φa+idϕa+id)Mi
M:=φdMM:=\varphi^dMM:=φdM
我们可以在 O(K3log⁡N)\mathcal{O}(K^3\log N)O(K3logN) 倍增解决
考虑 MMM 的特征多项式 f(λ)f(\lambda)f(λ)
我们只需要将 ∑i=0Nzi\sum_{i=0}^Nz^ii=0Nzif(z)f(z)f(z) 取模即可
于是就可以 O(K2log⁡N+K4)\mathcal{O}(K^2\log N+K^4)O(K2logN+K4)
Hint\mathcal{Hint}Hint555 没有二次剩余,需要维护 x+5yx+\sqrt 5yx+5y 的系数,慢慢写吧

Red-Black Boolean Expression

每个点有个选择的权值 ci≥0c_i\ge 0ci0
minimize:∑icizilimit:cu+cv≥1cu+c−u≤1minimize:\sum_i c_iz_i\\limit:c_u+c_v\ge 1\\c_u+c_{-u}\le 1minimize:icizilimit:cu+cv1cu+cu1
转对偶
maximize:∑ewe−∑utulimit:∀u,∑(u,v)∈Ewe−tu≤cumaximize:\sum_e w_e-\sum_ut_u\\limit:\forall u,\sum_{(u,v)\in E}w_e-t_u\le c_umaximize:eweutulimit:u,(u,v)Ewetucu
若不考虑 cu+c−u≤1c_u+c_{-u}\le 1cu+cu1 的限制,就是个最大流问题
现在就是要对每个点分配一个 tut_utu 使得最大流减去 ∑tu\sum t_utu 最大
注意到增大 tut_utu 是不劣的,我们将其设为极大值跑最大流就可以了

Selecting Edges

将图随机映射成二分图
容易发现正确的概率为 12k\frac{1}{2^k}2k1
我们做 TTT 次正确的概率为 1−(2k−12k)T1-(\frac{2^k-1}{2^k})^T1(2k2k1)T
映射成二分图后跑一个费用流就可以了
复杂度 O(Tnmk)\mathcal{O}(Tnmk)O(Tnmk)O(Tmklog⁡n)\mathcal{O}(Tmk\log n)O(Tmklogn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值