大家好这里是写题面的JRY。
最近因为种种原因,UR 跳票了半个多月的时间,不过终于,新的一场 UOJ Round 还是和大家见面啦。(在某学堂的提醒下,管理员们终于想起来还有UR这回事了...
因为写题面的人比较懒,所以这一次的标题就用了杜老师的格式:)
希望大家能够喜欢这一次的题目owo
Yist
By matthew99
算法一
直接状压每一种可能的子序列,时间复杂度
算法二
二分之后贪心每次删除最小的数,判断是否可行。由于删除一个数会让更大的数“更容易”被删,所以这个算法显然是正确的。
时间复杂度
算法三
使用平衡树等数据结构优化算法二,时间复杂度
算法四
我们考虑到对于一个数,删除它最小需要的区间长度是多少,如果我们在序列左右都加上一个无穷小且没有被删除,考虑找到它左边没有被删除的第一个比它小的位置
从左往右扫一遍,并用set或者什么其他数据结构维护一下,可以求出所有的
算法五
算法四中提到,需要的区间长度就是
考虑一个数,假设区间中有一个数需要删除且比它大,那么显然这个比它大的数所对应的区间长度比原数短,所以这样显然不会影响答案(因为我们要求的只是最小值)。
所以我们只要求出
这样很多劣于线性的算法都能AC,这里列举几个:
维护A的单调栈,并在上面二分,由于常数小可以AC。
用ST表加上二分,然后加上一些优化
从大到小加数,所有被删除的和已经被加入的未被删除的位置记为1,其他位置记为0,则显然
算法六:
为了避免成为辣鸡卡常出题人,接下来我来讲讲线性做法,我的程序可以在时限的大约三分之一内出解。
其实很简单,对于所有被删除的位置,从大到小,每次暴力找
题外话:
我看到开场就有几个人交了正解的第一步:只找最大的一个数暴力找
Ernd
By PoPoQQQ
因为A题和C题难度偏高所以出了道简单题平衡一下难度
ctb上瘾的出题人
算法一
对于subtask1,
暴力枚举接哪些水果,线性统计得分,时间复杂度
用DFS的方式可以将复杂度降低至
期望得分
并没有什么卵用的算法。
算法二
对于subtask2,
我们定义“段”为满足对于其中任意相邻元素
考虑暴力dp,定义
枚举
算法三
我们考虑如何优化第一部分转移。
我们将水果都放在二维平面上,第
旋转坐标系,将每个点变为
问题变成了一个二维偏序问题,用树状数组维护上升子序列即可。
观察subtask4,
第一部分转移使用算法三,第二部分转移暴力,时间复杂度
算法四
现在开始考虑如何优化第二部分转移。
注意到一段内的元素在按照
这部分转移每段之间彼此独立,因此我们考虑对于每段内部分别计算。
观察转移方程
我们发现这个式子可以斜率优化,将每个决策点
注意到我们维护的是上凸包而查询斜率
当然你要二分斜率也是完全可以的。
时间复杂度
算法五
考虑用另一种方法优化第二部分转移。
观察到对于决策点
由此我们发现了决策单调性,利用单调栈+二分的方法维护有效决策点,时间复杂度
什么你问我subtask3是干嘛的?
照顾常数写残党/数据结构爆搞党/乱搞党。
以上。
Sanrd
By Stilwell
算法一
容易发现我们需要求的是
一个最简单的方法是将每个数都质因子分解,对于前50\%的数据,
预处理出
时间复杂度
算法二
原问题等价于求
考虑用
容易发现
对于一个数
对于一个状态
设
那么现在问题就转化为这样两部分:
- 求
且 的质数个数。 - 用
的质数完成 的背包。
先来解决第一部分,设
设
设
递推时只需要计算
设质数密度为
当
所以,当
因此,不必重新计算
考虑对于每个
后半部分一定大于前半部分,故复杂度可以估计为
完成了质数部分的计算,考虑
回想前一部分是如何优化的,考虑如何省去
有
- 这一部分转移不再进行。
- 记录最后一次更新
时的 ,最后再计算相应的贡献。 - 当转移到这些
时,不更新 ,直接统计剩下还能使用的质数个数,计算相应的贡献。
优化后复杂度和第一部分一样为
时间复杂度