CSP-S 2020模拟赛2游记&&题解

先总结一下。

①你说这是CSP-S难度的?
②你说我旁边是谁?一堆天天跪着膜拜的神仙……

好消息是一分没挂,因为我只打满了暴力
毫无悬地拿了rk 1(显然是倒数的),人均 300 300 300(当然除了我)。

Solution

T1

这题并不是很难,大约TG D2T2难度,可为什么没想到……

首先,我们将这些关键点从小到大排序。可以发现,任何区间覆盖的都是一段连续的关键点。于是,我们将这些区间转化为“覆盖的关键点的区间”,可以说不仅完成了离散化,也完成了一个重要的转化,一举两得。

然后,我们考虑 d p dp dp。状态设计 d p i dp_i dpi表示覆盖到了第 i i i个关键点,当前看到的区间为 [ l , r ] [l,r] [l,r],那么状态转移为 d p i = ∑ j = l − 1 r − 1 d p j dp_i=\sum_{j=l-1}^{r-1} dp_j dpi=j=l1r1dpj

为什么呢?可以发现,当前的区间 [ l , r ] [l,r] [l,r]可以与之前的 l − 1 l-1 l1 r − 1 r-1 r1拼接起来。

但是,可以发现: 假设我们选定了一些区间,完成了覆盖的要求;还剩余一些区间,这些区间都是珂选珂不选的。所以,对于每一个区间 [ l , r ] [l,r] [l,r],我们还要将区间 [ r , i n f ] [r, inf] [r,inf]全部乘上一个 2 2 2

于是,我们将左端点按升序排序,左端点相同按右端点也升序排序,我们就得到了本题的标准错误解法。 可以发现,在这种排序方式下, d p dp dp是有后效性的。比如, n = 3 , m = 4 , a = [ 1 , 3 ] [ 1 , 4 ] [ 1 , 4 ] n=3, m=4, a={[1,3][1,4][1,4]} n=3,m=4,a=[1,3][1,4][1,4]就可以Hack掉你。

即,在选完 [ 1 , 4 ] [1,4] [1,4]后,那个 [ 1 , 3 ] [1,3] [1,3]是珂选珂不选的;但是,我们先扫描到了 [ 1 , 3 ] [1,3] [1,3],先对 [ 3 , 4 ] [3,4] [3,4]这个区间作了统乘的操作,没有任何效果,因为0乘上啥都是自己。而如果在左端点相同的情况下,按右端点降序排序呢?这个时候就没有任何问题了。注意对于一个区间,先区间乘法,再区间查询(查询 ∑ i = l − 1 r − 1 d p i \sum_{i=l-1}^{r-1}dp_i i=l1r1dpi的值),再单点修改即可。

相当于我们只需要维护三种操作:
①区间乘法
②区间求和
③单点修改

我们可以采用线段树中“先乘再加”的 l a z y t a g lazytag lazytag的方法即可维护,详见洛谷模板线段树 2 2 2

时间复杂度 O ( n l o g n + m ) O(nlogn+m) O(nlogn+m)

只要想到第一步的转化,后面每走一步都是套路,这题就得到了解决。谁叫我这么菜呢……

sto yzhang orz!

T2

这么水的题不仅没切掉,还打了个暴力,也真是醉了。比赛的时候把题目一直看错了……太菜了……

Lemma1: 一个强连通分量重的任何两个节点都不能在一次轰炸中被同时选择。

很显然,根据定理,强连通分量中任何两个节点都可以互相到达。

Lemma2: 一个DAG的答案是其最长链的长度

学习一下 p m t pmt pmt鸽鸽的思维方式:
①答案的下界为最长链的长度。因为最长链上任何两个节点都不能在一次轰炸中被同时选择。
②答案的上界也是最长链的长度。因为选最长链上一个节点的同时,我们可以同时选择横生的枝蔓。根据最长链的最长性,在贪心的情况下这些枝蔓一定不会在最长链被轰炸完毕后再被轰炸。

所以,答案就是其最长链。直接拓扑排序转移即可。


结合这两个引理,我们得到了最终的答案:

⌊ \lfloor 整个有向图的最长链,但是重复经过的边只算一次 ⌋ \rfloor

直接缩点,然后按照 L e m m a   2 Lemma\ 2 Lemma 2末尾所说的方法做即可。

时间复杂度 O ( n + m ) O(n+m) O(n+m)。sto pmt orz!

T3

先轻喷一下这个毒瘤超纲出题人。


Subtask 1: 大力转移,时间复杂度 O ( n 2 ) O(n^2) O(n2),期望得分 20 20 20

假设 u − > v u->v u>v有一条边,那么对于所有到 u u u的边,假设其长度为 d i s dis dis,那么到 v v v之后长度就会变成 d i s + 1 dis+1 dis+1

所以,我们考虑套路的 d p dp dp: 设 d p i , j dp_{i,j} dpi,j表示从某个节点到 i i i,且长度为 j j j的链的数量。

状态转移十分显然,略。

Subtask 2: 二项式定理推公式,巧妙转化;时间复杂度 O ( n k 2 ) O(nk^2) O(nk2),期望得分50分

首先,可以发现一个东西:

∑ i = 1 r ( a i + 1 ) k \sum_{i=1}^r (a_i+1)^k i=1r(ai+1)k
= ∑ i = 1 r ∑ j = 0 k C k i a i j =\sum_{i=1}^r \sum_{j=0}^k C_{k}^i a_i^j =i=1rj=0kCkiaij
= ∑ j = 0 k C k j ∑ i = 1 r a i j =\sum_{j=0}^k C_k^j \sum_{i=1}^r a_i^j =j=0kCkji=1raij

于是,我们转变一下状态设计: d p i , j dp_{i,j} dpi,j表示从某个节点到 i i i距离的 j j j次方的和。

然后,我们每次按照上述转移方式转移即可。

下面的内容过于超纲,就不放了。

sto gh orz!

T4

一道让全场爆 0 0 0的神仙题……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值