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)\)

posted @ 2023-01-30 13:33  Displace  阅读(31)  评论(0)    收藏  举报