CF 1913

A

先把第一个加到 a 中,然后扫到第一个不为 0 的开始给 b

正确性显然。

code

B

可以交换,也就是可以任意重排。

那么记录一下 0,1 的个数,从第一位开始模拟,知道 01 不够即可。

code

C

从低位往高位一位位做,假设当前做到第 i 位,有 c2i,那么做完后,可以两两配对得到 (c1)/22i+1,如果某一位是 1,并且 c0 就无解。

code

D

fn,0/1 为考虑前 i 个数字,留 / 不留 pi 的方案数。

首先考虑不留 pi 的部分。

想要删掉 pi,至少要找到一个小于 pi 的数才能做到,我们记 lii 左边第一个小于 pi 的数。

那么 fi,0=fli,0+fli,1

因为想要删掉 i 至少需要包含区间 [li,i],当然有可能是更前面的数,但那种情况也没有留 [li+1,i] 中的数,所以也计算在了 fli 中,把 [li+1,i] 中的数删掉后,剩下的 [1,li] 随便操作,我们并不关系 li 是否被删,所以 留和不留都加上。

考虑留 pi 的部分。

第一个想法肯定是 fi,1=fi1,0+fi1,1,因为会觉得既然留 i 那就前面所有的情况加上 i

但其实这样会忽略掉一些情况,如可能有些数等到 i 加入序列后才能被删,如果直接拿 i1 算的话会算少。

同样依赖 li,考虑 [j,i],j[li+1,i] 之间的操作,会删掉中间一段数,然后提供了 fj1,1 的贡献。

为什么不用加上 fj1,0

因为这种情况会被前面的考虑,当然 fli,0 不会被考虑,所以加上 fli,0 即可。

得到 fi=j=lii1fj,1+fli,0

发现是区间和的形式,前缀和优化即可。

code

E

首先考虑如何构造出一组满足题目要求的解。

看到限制比较多的题目,想到网络流,我们给每一行每一列都建一个点,记为 Ri,Ci。我们给每个行的点连一条 S>Ci 流量为 ai 的边,Ri>T 连一条流量为 bi 的边,对于在一个点 (i,j)1,我们让 CiRj 连一条流量为 1 的边,对改图跑最大流即可。

对于原问题,考虑费用流,对于每个 0 的点,降他的费用设为 1

首先强制所有 1 都变成 0,那么如果他最后变成了 1,那么我们就要剪掉这个费用,那么我们把这类点的费用设为 -1,即可。

直接跑最小费用最大流。

code

F

string,待补。

posted @   Svemit  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示
主题色彩