2023.1.29 省选模拟赛总结
1.时间安排
8:30~9:15
浅看一下三题:T1T2都与排列相关,T1是数论,T2是数据结构,T3一眼费用流,可能正解是模拟费用流。
先开T1:
首先显然最少的差值种类数是2。
大眼看上去没什么思路,打出来表发现不同的差值似乎只对应1种合法排列,于是可以暴力枚举差值,判断是否合法再看是否满足 \(p_1=s,p_m=t\),复杂度 \(O(Tn^3)\),40pts。
9:15~9:30
直接暴力康拓展开,复杂度 \(O(n^2logn)\),居然有60pts。
感觉正解可以差分后分块做,但是细节太多,决定先写T3。
9:30~10:30
先把 \(n=2\) 的分类讨论写了,复杂度 \(O(q)\),20pts。
然后写了暴力费用流,点数 \(O(q)\),边数 \(O(q^2)\),理论复杂度 \(O(q^5)\),但是网络流的复杂度众所周知是 \(O(写了就能过)\),+20pts。
上述做法与 \(n\) 无关,有一档分是 \(n\leq 30,q\leq 1e5\),想这能不能把一些相同的点归到一类上,变为与 \(n\) 相关的复杂度,但是思考很久后没想到解决方案。
想了一下能不能模拟费用流,但是做过的模拟费用流是一对一类型的,这题是一对多,感觉不太能模拟费用流。
10:30~11:10
回来看T1,继续打表,发现至少在 \(1000\) 内只要满足差值和 \(n\) 互质就能唯一确定排列,想了一下相当于是构造了个模 \(n\) 意义下的等差数列,只要互质同余方程就有唯一解,于是结论得证。
复杂度变为 \(O(Tnlogn)\),log 是 gcd 的 log,能去掉但是已经足够通过60pts了。
11:10~13:00
再推了推T2,按照逆序对计数题的套路对每一对逆序对计算他对答案的贡献,但是式子太复杂不像能分块的样子,认为是 log 数据结构科技,就放弃了。
吃饭30min。
回来推T1,试着把60pts的式子莫反,但是最后的形式是个同余方程的解数,而且前面的枚举还是 O(n)的,到比赛结束也没有进展。
result:
T1:60 T2:60 T3:40
2.总结
T1:
有两种做法,先讲莫反,另一种回头补上。
注意到根据莫比乌斯函数定义式,可以将 \(n\) 的不同质因子指数级别枚举组合(人话:状压),这样第一维的复杂度降低到了 \(O(2^{w(n)})\),在 \(n\leq 10^{12}\) 内 \(w(n)\) 只有11左右。
后面的是一个同余方程解的数量,根据上界分类讨论,比较麻烦,可以参考提交记录。
没有想到可以根据莫比乌斯函数定义式优化,不过细节很多也不一定能考场写出来,%Larunatrecy场切。
T2:
对于某一对 \(p_i<p_j\),其贡献是$\sum_{k=(j-i+n)mod n}^{n-1}{k!} $。
对值域分块,块与块之间可以卷积,块内暴力即可。
复杂度 \(O(nB+\frac{n^2log}{B})\),取 \(B=\sqrt{nlogn}\) 即可。
场上貌似式子推错了,看到题解的式子后面分块卷积的部分就容易理解了。
T3:
考虑同一类物品尽量用买进的填卖出的肯定不差(可以考虑用费用流的推流策略理解,0边和1边肯定选0边多一些费用更小)。
于是可以把同一类的物品用栈维护连边,此时可以看做括号匹配。
连一条边就代表着区间-1,希望最大化区间减的次数(假设答案是所有卖出的和,答案最后要减去区间减的次数,区间减次数越大答案越小),但是为了保证合法不能出现前缀和小于0。
考虑贪心,左端点固定时把更长的连边删去,保留较短的连边。
用stl中的set或者priority_queue维护即可,复杂度 \(O(nlogn)\)。

浙公网安备 33010602011771号