test20230905

写在前面的话

80+80+100+30=290,rank3 ,发现自己还是太菜了。

这次比赛挂大分,算下来掉了 40 分。本质上还是我自己对于问题的考虑不够全面,思维不够严谨。不好评价。

T1

题目描述:现在有 n 个区间,你需要选出一些区间,然后设这些区间的交集为 V ,并集为 U 。最大化 AV+BU , A,B 为题目给出的常数。

思路点拨:我们分两类讨论:

  • 选两个区间(这两个区间有交)

为什么是两个区间,因为选择更多的区间一定是更劣的啊(交集不变,并集变小)。

我们先排除区间包含的情况(并集不会变大,但是你交集变小了)。这一部分可以先对全部的区间按照左端点为第一关键字,右端点为第二关键字(右端点大的考前),进行排序。如果一个区间满足这个区间之前的区间有右端点比他自己的右端点要大,那么这个区间就是被包含的。记录一个前缀最大值就是可以的了。

之后我们枚举一个区间,使用数据结构去找另一个区间。
如果存在两个区间 i,j 满足 liljrirj ,贡献就是 (rilj+1)×A+(rjli+1)×B ,对于区间 j 而言,他的贡献就是 Alj+Brj 。我们将这个值插入到权值线段树的 lj 处,每一次对区间 i 在权值线段树上做 [li,ri] ,最大值查询,最后加上 (ri+1)×A+(li+1)×B 。这是一个常量,对于一个区间 i 而言是恒定的,与 j 无关。

时间复杂度 O(nlogn)

  • 选了一堆区间,没有交

就这样。考试的时候乜有考虑这一部分所以挂分了。

T2

题目描述:现在有一个长度为 n 的序列 a 。一次操作你可以选择两个相邻的元素 ai,ai+1 ,将删除之后,合并为两数之和放回原位置。问最少操作几次让序列不下降。

思路点拨:

陈年老套路题了,CSP-S2019。但是我考试的时候太懒没写 100pts 做法。

我们定义 fi 表示考虑到 a1ai 的最小操作次数, gi 表示在 fi 前提下, i 所在元素的最小权值。显然,当 f 最小的时候 g 也会最小。我们定义 suma 的前缀和数组,转移就是:

fi=min{fj+(ij1)}(gjsumisumj)

这样就可以 O(n2) 。我们注意到 gjsumisumj 就是 gj+sumjsumi ,转移的贡献就可以写成 i+(fjj1) 。其中, i 是不会改变的,我们只需要关系在 gj+sumjsumi 的状态中,fjj1 的最小值。所以我们可以使用权值线段树+标记永久化维护。

时间复杂度 O(nlogn) 。虽然 n=3×106 ,但是因为标记永久化并不会让权值线段树的深度达到最大值,所以还是可以通过的。本地可以 1s 内通过。

T3

题目描述:现在有 n 个长度为 n 的数组,你需要在每一个数组中挑选恰好一个元素,贡献就是这些元素的权值和。求出贡献前 n 小的贡献是多少。

思路点拨:

我们假设我们考虑到了前 i 个数组,有一个堆放着前 i1 个数组的贡献和前 n 小。然后我们将这前 n 小的贡献与 ai 这个数组的 n 个元素暴力匹配。之后取前 n 小加入堆中。

时间复杂度 O(k3logk) ,可以通过本题。

怀疑难度是倒的, T3 才是送分题。

T4

题目描述:现在有一张 n 个点 m 条边的无向图。边有边权,你可以选出一些边进行调查,费用是边权和。如果一个节点的度数是 d 并且他至少有 d1 条边已经被调查,就可以调查剩余的边。问如何在最小的代价下调查所有的边。边权可以为负数。

思路点拨:等价于删除一些边使得没有环。那么先排除负权边,因为选了肯定更优秀。我们求出剩余图的最大生成树,用全部正权值减去它就可以了。

问题在于,为什么删除边之后没有环才是可以的呢?因为如果有还,就存在一些点,他们有互相推出关系导致这个环无法被消掉,一直都不可以调查。

为什么是正边权减去最大生成树加上负边权呢?因为对于正边权图,我们要求删除边之后是一颗树,并且被删掉的边的边权小,那么留下的边的边权就大。

时间复杂度 O(nlogn)

更正情况:100+100+100+100=400

posted @   Diavolo-Kuang  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示