6.10模拟赛总结
Posted Flame♡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.10模拟赛总结相关的知识,希望对你有一定的参考价值。
zzzzzz
危 自从机房有了零食 很容易不停嘴
(拍拍肚皮)
要反向减肥了
(这也是为什么我不一次买很多零食/很多饮料放到机房的原因)
感觉今天题目有一点简单?更像省选/联赛模拟赛
做题顺序231吧
服了 T1推了半天还挂了15分(做法是对的 打组合数的时候打错了
时间安排
7.40-8.00
看题 感觉T1有可做空间 T2很眼熟(很怀疑是不是见过) T3 本能不想做(因为usaco和atc都见过类似的奶牛滑冰)
8.00-9.00
推T1 大概想出30分 n 3 n^3 n3 做法 (可以用多项式科技优化到 n 2 l o g n n^2logn n2logn 捏 不过出题人没给这一档 感觉很合理 不鼓励多项式)
9.00-10.20
做核酸 想T2分块(一眼吉司机,但感觉 l o g 3 log^3 log3 未免还是有些太接近暴力了) 分块最后的复杂度是 n 3 10 n 30 + n n 3 10 n 9 n\\sqrt\\frac310n30+n\\fracn\\sqrt\\frac310n9 n103n30+n103nn9 感觉比吉司机还离谱 9.40开始写吉司机 10.00写完 造了个数据发现自己细节写错了一点 带上卡常10.20结束
10.20-10.40
T1的 n 3 n^3 n3
10.40-11.20
T2的暴力(测完才发现自己原来没写第一档 寄)
11.20-12.00
继续琢磨T1(T3想了想 会 O ( n 6 w ) O(\\fracn^6w) O(wn6) 的优秀bitset维护可达性) 最后十分钟突然开脑洞 如果每个位置选哪些数不好做 是不是可以做某个数填到哪里 光速写完发现不会 还要考虑排列问题
题目分析
T1
寄
-
两个数之间的数只能是 m a x ( a [ i ] , a [ i + 1 ] ) max(a[i],a[i+1]) max(a[i],a[i+1])
-
如果出现 i < j , a [ i ] > a [ j ] i<j,a[i]>a[j] i<j,a[i]>a[j] 那么 j j j (包括)后面的数一定不能超过 n − i n-i n−i 个
因此 如果有 i < j < k , a [ i ] > a [ j ] < a [ k ] , a [ i ] > a [ k ] i<j<k,a[i]>a[j]<a[k],a[i]>a[k] i<j<k,a[i]>a[j]<a[k],a[i]>a[k] 我们可以发现 对于位置 j j j 来说 限制是最严格的
所以只用考虑相邻位置
- 因此 在第一个出现 i < j , a [ i ] > a [ j ] i<j,a[i]>a[j] i<j,a[i]>a[j] 的位置 直接退出
然后考虑dp
我们发现 我们需要在两个数中间填数
因此 我们将区间排序 按可填的数的值从大到小(可以发现 可填的值是一个后缀减去 a a a 里出现过的位置),设这个值为 l i m [ i ] lim[i] lim[i]
我们考虑处理出 f [ i ] [ j ] f[i][j] f[i][j] 表示前 i i i 个区间填了 j j j 个数
转移的时候考虑枚举 k k k 表示新填的数的个数
那么 f [ i + 1 ] [ j + k ] = ∑ f [ i ] [ j ] ∗ A l i m [ i ] − j k f[i+1][j+k]=\\sum f[i][j]*A_lim[i]-j^k f[i+1][j+k]=∑f[i][j]∗Alim[i]−jk
哈哈 那我又是因为什么挂分了呢
因为我***的打成了 A l i m [ i ] k A_lim[i]^k Alim[i]k
我恨 我真的好恨 我没有这么恨过
T2
考虑 把查询区间内的数连着 x x x 异或 记为 w w w 把 w w w 在二进制下的最高位记作 k k k
那么考虑 符合条件的数的个数就是区间内以及 x x x 里第 k k k 位有1的数的个数
1 操作就是区间取max
所以考虑维护一个区间 x o r xor xor 区间最小值 区间次小值 区间内二进制第 s i s_i si 位有1 的数的个数 区间次小值个数 区间max标记
我感觉这题的复杂度应该是 n l o g 2 n 30 nlog^2n30 nlog2n30
估计是跑不满吧
T3
第一档16分是特判(可惜我没写qwq
后面40是状压bfs
以上是关于6.10模拟赛总结的主要内容,如果未能解决你的问题,请参考以下文章