The 2024 CCPC Online Contest (C I J三题思路)

写在前面

因为学弟已经问了几个题了,于是乎这场没有vp,准备直接开写了

题目

C. 种树(树形dp)

题解

只有两种情况,

一种是1-2-3,1是2的父亲,2是3的父亲

另一种是1-2-3,2同时是1和3的父亲

所以树形dp从底往上合并即可

I. 找行李(线性dp)

题解

J. 找最小(线性基 分治)

题解

将ai^bi插入线性基,然后从高位往低位贪心,如果能令max(f(a),f(b))变小,则交换

证明

学弟的这个做法并不同官方题解,一开始学弟找了一个反例,

后来发现suma末位是1、sumb末位是0,没法做到让基里不出现1

于是,开始思考这样的正确性,是数据水了还是这个做法是正确的

想了近乎一天,最终认为它是对的,给一个证明

因为对称性,也就是说,

如果我用一些操作使得最终suma≤sumb,

我一定可以反选所有操作使得suma≥sumb

这意味着a和b的所有位都是可以互换的,只是有些位会有联动

从高到低,忽略不可操作的位后,遇到a和b都是1的,都消成0

而遇到a和b一个0一个1时,第一次不管换没换都是其中一个1一个0,

不妨是a为1,那么第二次以后全令b为1令a为0,

这样的贪心最小是可得的,并且只要第二次以后没按这个操作来,就会违反不等式

跃迁佬的补充:

只关心sa^sb的最高1位那步的正确性(其他显然)
由于sa^sb可被线性基表示,这组线性基(R)全反选相当于sa,sb互换(无效果)
于是这步可以直接乱选,反正万一选错了R内的其他基也反选就是

所以在sa^sb的最高1位那步可以直接rand

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Code92007

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

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

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

打赏作者

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

抵扣说明:

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

余额充值