好多题,不嘻嘻。
只保留了我认为比较有意义的题。
QOJ9540 Double 11
题意
现在有
你现在需要将所有物品分为
现在需要对每一组选出一个非负实数权值
在此条件下,需要让
题解
考虑若已经确定了分组的方案,如何确定最优的
设第
根据柯西不等式,有
那么可以得到
而题目需要我们求出最小值开根后的结果,也就是
假设我们现在已经固定了
那么此时可以发现,将初始的
假设两组分别有
不难发现,
也就是说,第一组物品销量和应该尽可能小或者尽可能大。
那么第一组物品一定是所有物品中最左边的
这样我们就证明了,同一组的物品一定在一个区间内。
考虑暴力,设
设
这里应该有一个证明,但我不会证
这样我们就证明了
原题相当于在蒙日矩阵上做最短路,要求恰好走
那么直接 wqs 二分然后二分栈优化 dp,时间复杂度是
提交记录。
QOJ9737 Let's Go! New Adventure
题意
游戏中有
一个怪只能被打一次,一个账号打的所有怪,编号必须是一个完整的区间。
第
一个账号带来的收益是他的等级减去一个常数
题解
首先令
令
令
设
由于
考虑列出 dp 方程,
时间复杂度
提交记录。
似乎可以优化到单
ABC383G Bar Cover
题意
现在有
对于一个数字
对于每一个
题解
令
考虑暴力 dp,设
那么 dp 值关于
考虑从
分治求出
CF1787H Codeforces Scoreboard
题意
现在有
如果第
求最多能获得多少分。
题解
假设所有题目初始会有
显然,如果
后面和这个一样,平衡树解决。
时间复杂度
CF1534G A New Beginning
题意
平面上有
你初始在平面的
若你当前在点
求激活所有
题解
考虑激活一个点的代价是当前位置与那个点的切比雪夫距离。
那么我们应该只会在走到
设
转移分为两种,第一种是向右或向上走一步,方程为
第二种是激活一个点
考虑维护 dp 值的差分的差分。
由于一次
(也就是说如果
现在考虑两种操作怎么维护。
第一种操作相当于是给原来函数谷值右边的部分往右平移一个位置。
也就是说,将维护序列的后半部分,整体
第二种操作相当于是给某个位置的差分的差分加上
相当于是给序列中插入两个相同的数字。
使用对顶堆维护即可。
时间复杂度
提交记录。
QOJ8362 game
题意
现在有
任何时候你的体力值不能是负数。
对于每一个
好像这题的样例输出 1 是错的,然后输入格式是对的。
题解
先考虑,如果我们已经确定了初始的体力值,我们如何确定怪能否全部打完。
相当于是确定一个打怪的顺序。
首先可以知道,一定是先打
为什么呢,假设存在一个
我们不妨设
那么我们将打怪物
所以至少存在一个合法的方案,先打了所有
对于
对于
那么这部分和上面那部分应该是对称的,也就是说这部分应该按照
这样我们就确定了一个打怪的顺序出来。
那么来思考第一部分。
由于第一部分我们是按照
那么可以发现,我们一定是打了一个前缀的所有怪物(因为如果某一个怪物打不了,后面的所有怪物就都打不了)。
我们容易预处理出,如果第一部分要打
假设我们能够算出,在第二部分中,打
所以本题难点在于第二部分。
对于第二部分,我们已经知道了打怪的顺序,那么就可以先看看暴力。
设
那么有方程
考虑
对于任意的
而
这说明
设
由于它们都是凸的,所以这可以直接闵可夫斯基和优化。
值得注意的事情是,
时间复杂度
提交记录。
GYM103202L Forged in the Barrens
题意
给定
题解
和上面那个 ABC 基本一样。都是区间分治一下维护矩阵。
直接做状态是
这样直接做可能会寄,考虑如果一个区间同时选定了最小值和最大值,我们直接强行让这个区间结束。
这样就只需要记
GYM102586B Evacuation
题意
现在有
如果第
现在一共有
第
题解
首先可以知道,这
考虑如果已经确定了初始位置,如何知道答案。
所有人应该都优先往两边最近的避难所走,所以二分一下然后前缀和瞎算一下就对了。
容易发现,一个询问中,当所有人初始点在区间左半边某个点的时候,区间右端点在哪里不影响答案,因为左端点左边的位置可以放下所有人。
同理,区间右半边也是一样的。
所以考虑对两种情况分类讨论,考虑求出起始点在区间右半边的最劣情况。
设
考虑
若
同时还有
可以推出
若
移项可以知道
也就是说
而我们求的相当于
考虑将所有询问离线,然后建一棵线段树,将所有询问挂到对应的区间上。
然后对于一个区间来说,每一行是这个区间里面的一个点,每一列是挂在这个区间上的询问。
然后我们对这个询问跑分治,就能跑出所有询问的答案。
时间复杂度是