2023.2.2 省选模拟赛总结
1.时间安排
8:30~10:15
浅看三题:T1数据结构+神秘的匹配,T2是和集合相关的,T3组合计数。
T1的n^2似乎也很难做,想了一下可以求出路径集合后暴力dinic匹配,匹配过程可以二分,复杂度是 \(O(qn^{1.5}logn)\),不过很难卡满。
又想了一下可以用树上莫队+bitset+分类讨论写 \(c=2\) 的部分分,在10:15写完调完,60pts。
10:15~10:45
把区间差分,一共只有 \(O(n)\) 个不同的区间,每个区间内的数对应的集合都是相同的,提取出来这些区间再sort即可。
一开始算错了区间个数,以为是 \(O(n^2)\) 级别的区间数量,就写了二分+hash的比较函数,麻烦不说最后还忘了去重……导致40分变成20分。
10:45~13:00
写了T3的 \(O(n^5)\) 暴力,\(n=100\) 的数据最快也只能跑到 1.7s,离1s太远,就想能不能优化到 \(n^4\),但是太多变量需要记录,所以考虑重新设计状态。
这种最大值按套路拆成差分的形式,但是不管怎么推最后又回到了 \(n^5\) 的复杂度,没办法最后只好选择了打表,但仍然无济于事。
13:00~13:30
测了一组 \(c=2\) 的满档数据,发现增加链长后2s跑不完,调了调块长并卡常后可以跑进1.5s就不管了。
result:
T1:60 T2:20 T3:10
2.总结
T1:
对于 \(c>2\) 的数据把 \(c=2\) 的做法最后的分类讨论改成Hall定理即可。
二分图匹配的那套理论已经忘完了,做点题回忆一下。
T2:
一个集合去重技巧:给每个元素赋一个随机值,集合的价值看做所有元素的随机值的异或,极大概率上可以做到去重。
利用这个技巧,把每个线段赋一个随机值,这样就可以完成去重,之后就需要考虑求出字典序第 \(k\) 大的集合。
按照 \(1\) 到 \(n\) 的顺序依次求出当前前缀内有多少个集合即可,用线段树加速这一过程,需要特别注意的是集合去掉前缀是空集的情况,可以维护所有集合长度的最小值,填数后把所有区间长度-1,,再次填数前先去掉所有长度为0的集合,在线段树上暴力做是均摊的,整体复杂度\(O(nlogn)\)。
T3:
首先发现图结构是不影响答案的(每个点的度数确定了,与他相邻的点在不同的图中是等价的)。
设 \(a\) 表示图中每个点的度数。
新套路:设 \(E(x)\) 表示 \(x\) 最大值的期望,则 \(E(x)=P(x\geq1)+P(x\geq2)+……\),证明显然。
这样就只需要考虑极长的 \(a\) 段大于等于 \(x-1\) 的概率,要求的东西是集合的并集,用并集和交集的容斥,在计算具体的项的时候需要在根据第一个段是否在开头位置分类讨论一下。
因为需要枚举集合大小,而集合大小之和是调和计数,所以复杂度是 \(O(nlogn)\)。

浙公网安备 33010602011771号