2/4考试总结

文章描述了一次编程竞赛中的时间分配和解题过程,重点讨论了如何处理期望问题(利用转化和动态规划),数据结构的应用,以及部分分的策略。对于T1问题,作者提到经典的期望技巧和0/1背包思想;T2问题中,提出了使用KMP算法解决排列问题的可能性;T3问题涉及最大值区间处理和动态规划优化,通过区间加和求和来达到O(nlogn)的复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间安排

8:30–9:00 看题,T1是期望,T2是个数据结构,T3不太会正解但是有一堆部分分。
9:30–10:00 T1,对于 n<=6 可以暴力 dp ,考虑 n<= 100 怎么做,一个点是这个排列是肯定不能枚举的,于是想到估计要转化成相对大小什么的,有个模糊的 dp ,敲了一下发现不太对,但是 m=1 的时候应该是可以通过的。
10:00–10:13 T3,把 n^2 dp 写了。
10:13–11:20 T1,对于 n<=13 可以三进制状压,然后把 m=1 写了。看了一眼 T2 ,暴力可以无脑 sort ,然后就不会了,题目的排列的条件不知道怎么处理,然后就卡在 10 分做不下去了。
11:20–12:50 T3,对于最大值比较小的可以暴力,然后是一堆部分分,两个值的可以分讨前缀和,偶数为 n 的可以分讨二分,数据随机的可以用栈维护最大最小值然后枚举区间做,这就有 4 个档了,每个档做法都一样,中间还吃了趟饭,写着写着就结束了。

回顾反思

T1:
依旧是期望的 trick ,
∑P(x=i)⋅i=∑P(x>=i)\sum P(x=i)\cdot i=\sum P(x>=i)P(x=i)i=P(x>=i)
这个套路是典的,更为重要的点是怎么实现转化以及怎么处理的,这道题枚举 x 大于等于的一个限制 i , 然后把所有满足限制的看作 1 ,不满足的看作 0 ,那么就只需要对 1 的个数计数,然后看最后第 k 个是不是 1 就行了。这种钦定限制后按有无贡献分成两类,只考虑 “0/1” 的思想要学习一下。
T2:
部分分没有一点想法很可惜。
对于部分分,考虑对排列逆置换之后就可以看作区间内元素大小的一个分布,然后可以 hash 处理,在线段树上维护 hash 值就好了。感觉对这种数据结构维护的问题敏感度不是很够?需要多练一练。
正解非常强,是 kmp 。考虑原问题是考虑在维护好 q1,q2,…,qk 之后能否加入 qk+1 ,结合具体题目,发现具有自反性、对称性、传递性,是一组等价关系,于是任何kmp 的性质和思路都可以套用,用kmp的方法维护就行了。
T3
最为关键的是要知道:
以最大值为例,设 ai处于且为最大值的区间为[li,ri]a_i 处于且为最大值的区间为 [l_i,r_i]ai处于且为最大值的区间为[li,ri] ,那么枚举 ∑min⁡(i−li,ri−i)\sum \min(i-l_i,r_i-i)min(ili,rii) 的复杂度是 O(nlog⁡n)O(n\log n)O(nlogn)的。
dp 时,若左边区间更小,那么枚举左边 dp 值更新右边的某个区间,相当于区间加,可以差分;若右边区间更小,枚举右边的 dp 值,受左边某个区间的贡献,相当于求区间和,可以前缀和维护。
于是复杂度就是 O(nlog⁡n)O(n\log n)O(nlogn) 的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值