Codechef November Challenge 简要题解

Magical Candy Store

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

Scalar Product Tree

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

Unusual Queries

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

Chef and the Combination Lock

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

Panic! at the Disco

∑ i = 0 N F a + i × d × M i = ∑ i = 0 N 1 5 ( φ a + i d − ϕ a + i d ) M i \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^i i=0NFa+i×d×Mi=i=0N5 1(φa+idϕa+id)Mi
M : = φ d M M:=\varphi^dM M:=φdM
我们可以在 O ( K 3 log ⁡ N ) \mathcal{O}(K^3\log N) O(K3logN) 倍增解决
考虑 M M M 的特征多项式 f ( λ ) f(\lambda) f(λ)
我们只需要将 ∑ i = 0 N z i \sum_{i=0}^Nz^i i=0Nzi f ( z ) f(z) f(z) 取模即可
于是就可以 O ( K 2 log ⁡ N + K 4 ) \mathcal{O}(K^2\log N+K^4) O(K2logN+K4)
H i n t \mathcal{Hint} Hint 5 5 5 没有二次剩余,需要维护 x + 5 y x+\sqrt 5y x+5 y 的系数,慢慢写吧

Red-Black Boolean Expression

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

Selecting Edges

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FSYo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值