ABC344

怎么越来越菜了呢?

ABC比较一眼。

D

dpi,j 代表考虑完前 i 个包取得 T 的前 j 个前缀的最小代价。

暴力枚举转移即可。

code

E

preinxti 分别代表 i 的前驱和后继。

维护一下头指针即可。

F

感性题。

首先将二维点变成一维点。

dpi 代表走到 i 的最小步数,和在最小步数的基础上的最大钱数。

我们考虑枚举最后一个停留的点进行转移。

转移较为简单,我们先说为什么一定要将步数最小化。

一个显然的结论就是停留的点中 pi 单调递增。——syz&ly

假设你第 i 个停留的点满足 pi>pi+1,那肯定可以在 i 把后面的都选了。

感性理解一下发现是对的。

说回转移。

我们预处理出 disi,j 代表 ij 在不停留的情况下能剩余的最大钱数(可以小于 0)。

我们假设最后一个停留的点为 j。那么我们的路线就是 1ji

前面那段的信息就是 dpj。关于后面,我们可以根据 disj,i 和前面那段的剩余钱数处理出最少停留几次,和 ji 的曼哈顿距离加入到行动次数中。钱数也可以在这个过程中处理出来。

注意原则:步数尽可能小的前提下钱数尽可能大。

多感性理解即可。

code

G

观察一下式子 YA×X+B

可以得到 YA×XB

一个自然而然地想法就是按照 YA×X 排序,询问时二分。但是这样显然会 T。

考虑对于 (X1,Y1)(X2,Y2),当 A 增加时,它们地相对顺序至多会改变一次。

首先若 X1=X2,它们不会改变顺序。

不失一般性地假设 X1>X2,当 A= 时,用初等数学的眼光看待会发现按照 Xi 递增排序。

考虑一下第一次交换是什么时候。交换说明 Y1A×X1>Y2A×X2,推一下式子。

Y1Y2>A×X1A×X2

Y1Y2>A×(X1X2)

由于我们已经按照递增排序,所以存在 X1X2<0

Y1Y2X1X2<A

假如说存在第二次交换。

Y2A×X2>Y1A×X1

仿照上面的方法,发现 Y2Y1X2X1>A

变形,Y1Y2X1X2>A

由于 Y1Y2X1X2 是一个定值,而 A 又在递增,所以不可能存在第二次交换。

于是我们发现两点只会交换一次,总交换数不超过 n2

所以我们只需要维护这些交换即可,怎么维护?

上面我们已经推出了交换的条件:Y1Y2X1X2<A

用堆维护一下两点之间的斜率即可。

什么sb代码调不出来一点

由于存在精度问题,所以直接除会产生问题,应该通过数学知识变成乘法。

posted @   BYR_KKK  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示