NOIP 模拟 20/11/02

A

B

B \mathcal{B} B 开头的算法,通过维护前缀最大次大值可以做到 O ( n log ⁡ n ) \mathcal{O}(n\log n) O(nlogn)

C

考虑枚举一个数并判断它合不合法, 将这个数写成 K K K 进制小数
容易发现这个小数是 1 1 1 放到树的对应深度里面的个数进位后的结果
合法的必要条件是这个数 0. z 1 z 2 … z l 0.z_1z_2\dots z_l 0.z1z2zl 满足 ∑ z i ≤ n , ∑ z i ≡ n m o d    K − 1 \sum z_i\le n,\sum z_i\equiv n\mod K-1 zin,zinmodK1
充分性可以通过构造得到,方法如下:
l − 1 l-1 l1 位往前做,若 ∑ z i < n \sum z_i <n zi<n 我们就让当前位进位
不够的时候从前面借位
我们对这个数进行 D P \mathcal{DP} DP 就可以了

D

f i , j f_{i,j} fi,j 表示到 i i i,是第 j j j 个的方案数
枚举 i i i 前面的第 j j j 个容斥转移

  • 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、付费专栏及课程。

余额充值