2/4考试总结

时间安排

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
最为关键的是要知道:
以最大值为例,设 a i 处于且为最大值的区间为 [ l i , r i ] a_i 处于且为最大值的区间为 [l_i,r_i] ai处于且为最大值的区间为[li,ri] ,那么枚举 ∑ min ⁡ ( i − l i , r i − i ) \sum \min(i-l_i,r_i-i) min(ili,rii) 的复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn)的。
dp 时,若左边区间更小,那么枚举左边 dp 值更新右边的某个区间,相当于区间加,可以差分;若右边区间更小,枚举右边的 dp 值,受左边某个区间的贡献,相当于求区间和,可以前缀和维护。
于是复杂度就是 O ( n log ⁡ n ) O(n\log n) O(nlogn) 的了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值