海亮寄 7.10
前言
业精于勤荒于嬉,行成于思毁于随
正文(模拟赛)
卦象:大凶
感受:是 IOI 赛制,\(3.5\) 个小时 \(8\) 道题,分数 \(200/800\)。仅仅完成了人口普查题,获得了机房倒数的好成绩。今天很难有长篇大论的感受,活着就不错了。早上起来头昏脑涨,眼皮都睁不开。明明昨天 \(22:00\) 就睡着了(也没有失眠),今早 \(7:00\) 才起,但依旧困的不行。把两道签到切掉(中间 T2 爆搜还写挂了一次),准备开 T3。然而消化系统开始发力,厕所里住了十来二十分钟。回来之后感觉整个人都疲软无力,敲键盘手都是软的。以为 T3 是金牌导航的题(好像是折线统计),结果写了一个点,调试之后发现还有一个限制。脑子宕机了,不会做剩下的限制,遂放弃。时间只剩下一个小时多一两分钟,做了一个胆大包天的决策,不写代码了。我认为以我现在这个状态根本就没有办法在剩余时间内完整地敲完一道题的代码。为了保障下午听课的效率,每个题都扫一眼努力口胡。瞄了一眼成绩表,看到好多北中的人都 A 掉了 T3 T4,为他们开心,也顺便把自己的心态搞崩了。开始阅读 T4,T4 好像有了第一眼就有一个疑似复杂度正确的做法,细想之后感觉自己可以切掉就跳过去了。T5 就只想到了图论建模之后最短路,但也有观测到的一些性质,比如搜索树深度很小之类的,以及很多路径较大的部分是无用的。T6 只有一个比较神秘的错误复杂度的区间 DP 做法,但是看到 HINT 又觉得自己可能想对了,完成以上步骤之后,剩余时间 15min。扫了一眼 T7,一眼不可做题,T8 没有正解思路,暴力思路一大把,各种暴力结合 DS 优化都有。最后时间回去看 T3,虽然很难受,但还是想把 T3 做出来。毕竟 T3 很多人都切掉了,只有自己没有切掉的感觉并不好受。重新整理思路之后开始作画,各种折线图。若干页草稿纸就下去了,最后还是没有成熟的思路。罚坐时间,人实在是挺不住了,虚的没边了,遂卧倒在屏幕前。总结一下,T1 T2 过了,可能把 T4 敲了能有 300pts,T6 疑似正确但还有好多细节没有完善,等着听讲题,T5 随便搞一搞也能白嫖过半的分数,而 T3 要成为心中挥之不去的执念了。T7 可以搞 20pts,T8 复杂度玄学,20pts 到 40pts 波动不等。唉,希望讲题的时候能都补回来,或许现在滚去睡觉是当下最正确的抉择
Upd. T5 的观测是正确的,算是给自己一点慰藉
T1
人口普查,过
T2
人口普查 \(\times 2\),过
T3
两个做法
法一
考虑按题意要求对点集排序,然后记 \(f_{i,j}\) 表示最后两个点的值是 \(x_i,x_j\) 的合法序列方案数
转移方式有两个
-
对于 \(x_i>x_j\),有 \(f_{i,j} = \sum \limits_{x_k > x_i} f_{x_j,x_k}\)
-
对于 \(x_i<x_j\),有 \(f_{i,j} = \sum \limits_{x_k < x_i} f_{x_j,x_k}\)
上述转移时间复杂度 \(O(n^3)\),需要优化
注意到转移形如一个前后缀和的形式,所以直接前后缀和优化即可!
(需要离散化)
法二
将上述构造折线图的流程倒过来,发现 \(x_i\) 是从中间向两边拓展的
进一步发现,我们记 \(f_i/g_i\) 分别表示最后一条边 向右 / 向左 指到结点 \(i\) 的方案数
枚举 \(i\),在 \([1,i-1]\) 中 \(j\),容易发现转移形如 \(g_j \to f_i\) 或者 \(f_i \to g_j\),具体是哪种转移方式取决于 \(y_i,y_j\) 的大小关系
第一种转移是随便维护的
第二种转移需要优先算出满足 \(i>j\) 的所有 \(f_i\) 值
因此内层遍历 \(j\) 是需要倒序的!
(不需要离散化)
T4
(还是很虚弱怎么办,键盘敲不动……)
赛场上一眼就会了,只需要觉得 \(u \to fa\) 的边是否出现在直链划分中即可,判定无解的充要条件是——存在一个结点 \(u\) 使得它 \(v\) 选中 \(v \to u\) 的边的儿子 \(v\) 超过 \(1\) 个
容易发现,只需要从叶子不断跳跃父亲维护
问题转化为 \(a\) 序列与 \(b\) 序列判等
有 dalao 直接 multiset 干过去了,老师讲解的是和值域相关的维护桶数组的做法。然而,最后还是拿万能的哈希水过去了
T5
又是一道赛场上就会写的题目
图论建模+最短路,使用 floyd 可以至少拿 40pts
然而一顿观测,猜测边权 \(\ge 20\) 的边是不会出现的,这时候就变成稀疏图了,跑迪杰斯特拉即可
T6
区间 DP 的 \(O(n^3)\) 是正解,疑似第三道人口普查
T7
赛场上的感觉错了,原来是道简单题
\(f_i = 2^i - 1\)
\(G(x) = 2^B - 1,B = \text{highbit}(x)\)
然后对于全 1 串做与运算相当于取模
所以艾弗森括号里就转华为了一个同余的式子
进一步地,发现同余式子一个一项就可以转化为关于 \(i,c\) 的整除式子
然后就可以知道 \(i\) 什么时候会贡献给 \(dp\) 数组了
最后结论是若干个等差数列求和,以及刨除一部分尾端贡献,代码实现细节较多,但思维链不长
T8
注意到值域只有 \(100\),考虑状态压缩表示颜色数
枚举左上角 \((i,j)\),容易发现答案关于边长 \(x\) 单调,所以直接二分
答案转化为快速查询一个矩形的颜色数
基于上述的状态压缩,颜色数转化为或和
静态 RMQ,二维 ST 表即可
\(a_i\) 还是有点大,建议使用 bitset 维护
小结
赛时会 T1、T2、T4、T5、T6,赛后 T3、T7、T8 也学会并订正完了,而且听讲题收获了许多不同的实现方法。虽然今天身体报错,但收获颇丰!
后记
世界孤立我任它奚落
完结撒花!

浙公网安备 33010602011771号