CSP-J 2020模拟赛题解

先总结一下。

策略完全正确,对拍出了很多错误,最终一分不挂。可惜的是,第四题最后没来得及去想出正解,决定使用 O ( n 2 l o g n ) O(n^2logn) O(n2logn)的树状数组写法,拿了 60 60 60分的部分分,全场一堆人切掉这题(sto b6e0 orz),我太菜了……

可能还是要练一下切题吧,不能不管什么难度的题都要在 30 − 60 30-60 3060分钟内完成,这是对“绝杀”不利的。要保证效率的情况下,节省时间,为后面的大题节省时间。

T1

似乎可以优化到 O ( n ) O(n) O(n)。这里说一下 O ( n ) O(n) O(n)的大常数 d p dp dp

d p i , a , b , s dp_{i,a,b,s} dpi,a,b,s表示看到了第 i i i位,目前末尾两个字母分别是元音/辅音, s s s表示目前是否有 L L L

状态转移十分显然,略掉。

T2

首先, O ( n 2 ) O(n^2) O(n2) d p dp dp十分显然。

状态设计: d p i dp_i dpi表示看到了第 i i i位的最长链长度。

状态转移就是枚举上一个与其差的绝对值不为 1 1 1的数,尝试从那里来更新答案。但是,有 n ≤ 100000 n≤100000 n100000在那里,这显然不是正解。

于是,我套路式地使用了权值线段树优化 d p dp dp。时间复杂度被优化成了 O ( n l o g m ) O(nlogm) O(nlogm),其中 m = m a x   a i m=max\ {a_i} m=max ai

听说可以单调队列做,可惜我不会

T3

一个很显然的贪心: 大的配小的,小的配大的

简略证明一下。假设原来 a a a b b b c c c d d d是最优的,那么 a a a d d d, b b b c c c就不是最优的。

即, m a x ( a + b , c + d ) ≤ m a x ( a + d , b + c ) max(a+b,c+d)≤max(a+d,b+c) max(a+b,c+d)max(a+d,b+c)
b < d b<d b<d,那么就有 a + b < a + d , b + c < c + d a+b<a+d, b+c<c+d a+b<a+d,b+c<c+d,消去 a + b , b + c a+b, b+c a+b,b+c得到 c + d ≤ a + d c+d≤a+d c+da+d,即 c ≤ a c≤a ca

所以,当 b < d b<d b<d的时候, a ≥ c a≥c ac最优,印证了上面的那个贪心决策。


每次排序+扫一遍 O ( n 2 ) O(n^2) O(n2),显然会超时。

但是,看到数据范围有一个 x , y ≤ 100 x,y≤100 x,y100,于是我们就开桶做,每次双指针扫一遍就完了。

时间复杂度 O ( 100 n ) O(100n) O(100n)

T4

献上一个神奇的做法。

首先,我们处理出每个战役的权值,表示在这个位置后面,除去第 n n n次的 E n d End End操作中需要的 R P RP RP的最小值

然后,我们将战役得到的 R P RP RP值从大到小排序,如果这个战役可以选,那么就选;否则就不选。每当我们选择了一个战役参加,就把以这个战役所在区间为开头,以第 n − 1 n-1 n1个位置为结尾的所有权值全部减去 1 1 1

不懂?放张图:

在这里插入图片描述
使用差分套树状数组维护区间修改与单点查询即可。

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

难度评价

T1: 黄(PJ T2.5)
T2: 绿(PJ T3)
T3: 绿(PJ T3)
T4: 绿(PJ T3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值