NOIP 第十五次

时效性

A

观察规律,发现 t 次变换后,二元组变为 (ak+b(k2t),a(1k)+b(2tk+1)),其中 k[1,2t]

显然 a+bc+d 时不可行,a+b=c+d 时只需找到令 a 变为 c 的最少步数,因为此时 b 一定变为 d

形式化地,需要找出最小的 t,使得其对应的 k=c+2tba+b[1,2t]

可以发现最小的 t 不会超过 log2p,于是直接枚举 t 即可。

B

n18 个数贪心分配(当前哪个集合和更小,就给哪个集合),分配完后两集合的和的差 Δ 一定在 [W,W] 内,

数据随机,所以可以认为从后 18 个数中选一些给第一个集合,选一些给第二个集合,给两集合选出的数的和的差一定可以取遍 [W,W]

所以搜出一种方案使得这个差为 Δ 即可。

C

su 表示 u 的子树大小。考虑一个点 u 的工资何时可以被知道:

  1. su>k:可以发现,u 的工资可以被知道当且仅当 u 没有兄弟。
  2. 1<suk:可以发现,u 的工资不可能被知道。
  3. su=1:可以发现,u 的工资可以被知道,当且仅当 u 没有兄弟,且 u 的父亲有不少于 k1 个兄弟,且这些兄弟 v 要么是叶子,要么 sv>k

fu 表示 u 子树里最多知道多少个点的工资,考虑进行怎样的操作:

  1. 建议不理:fu=fv
  2. 只留一个 sv>k 的孩子:fu=1+maxsv>kfv
  3. u 有不少于 k 个孩子,还可以把一个 sv>1fv=0 的孩子删到 sv=2,然后把其他 svk 的孩子删到 sv=1fu=1+fv

三种方案取最大值即可。

D

fi 表示 [1,i] 划分权值和,hi 表示 [1,i] 形成的十进制数模 998244353

fi=j=0i1fj×(hihj×10ij)=j=0i1fj×hij=0i1fj×hj×10ij=hij=0i1fj10ij=0i1fj×hj×10j

posted @   Jijidawang  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示