2023.3.22 省选模拟赛总结
1.时间安排
7:30~8:30
T1:图论题,要求直走知道撞到墙,感觉这个限制很熟悉,图规模是1e6大概是线性的,最多带个log。
T2:DP题,一眼离散化\(n^2\) DP 可以拿40分,但是显然这个东西是没法优化的,不过可以知道的是 \(b\) 的限制一定是可以离散化的,因为这东西显然不能拉插,可能正解是容斥。
T3:构造题,大概会一个 \(O(2^n*n!)\) 的 DP,但是 \(n<=7\) 这个数据范围非常不友好,正解范围很大,应该是很强的性质题,不过有特殊性质分也许能做。
显然任意两点间的距离都可以通过若干同一行或列两点间的路程转化,而同一行或列的两点间距离是容易求的,这样大概能做 \(n^3logn\) 的复杂度,进一步发现似乎只需要求一个点到相邻点和直达点的距离就可以传递出其他同一行或列的点的距离,复杂度就变成了 \(n^2logn\),但边权是 \(1/2\) 不能用01bfs最短路,不过应该足以通过。
大样例和没给一样,自己捏了一些数据正确性大概是没问题,满数据大概400ms,应该能过。
8:30~9:30
把 T2 的40分写了,再次确定这东西复杂度有确定 \(n^2\) 下界,于是思考如何容斥。
既然求的是任意两点不同,就改成至少 \(k\) 个点相同的方案数,用二项式定理合并,此时问题大概转化成了求树上选出 \(i\) 个点组成 \(j\) 个连通块,每个连通块的权值定义为内部点权最小值,所有情况下连通块的乘积,这样容斥系数就是边数 \(i-j\)。
感觉复杂度还是 \(n^2\) 级别的,没继续想。
9:30~11:00
把 T3 的状压 DP 写了,确实只能跑动 \(n\leq 6\),也观察不出来构造的规律,复杂度也难以降下去,没办法只好写了模拟退火。
之后把 \(a_i=i\) 的构造打表出来想做特殊性质分,但是也每观察出什么,甚至没得到有解的条件,放弃。
11:00~12:00
否定了T2容斥的思路,往其他方面向,试图找一些根号的做法,没什么收获。
result:
T1:100 T2:40 T3:11
2.总结
T2:
确实是容斥,我多加的一维 \(j\) 画蛇添足了,实际上只需要考虑合并两个连通块时乘上-1就好了,意义为多选择了一条边。
那么列出来DP式,因为涉及到最小值的更新,所以要特殊处理根节点所在的连通块。
具体的,令 \(f_{x,i}\) 表示 \(x\) 所在的连通块最小值是 \(i\) 的上述权值和,额外记录 \(g_{x,i}=\frac{f_{x,i}}{i}\) 方便最小值的更新。
那么就有:
\(f\) 直接在 \(g\) 的基础上乘上常数就好。
维护的都是后缀的形式,用[NOI2020] 命运的线段树合并套路优化这个DP即可,复杂度 \(O(nlogn)\)。
T3
一个很常见的结论是在排列中每交换一次会让逆序对数的奇偶性恰好改变一次,证明略。
那么给出的排列逆序对数如果和 \(\frac{n*(n-1)}{2}\) 的奇偶性不同则一定无解。
下面通过构造就能证明奇偶性相同时一定有解。
首先把 \(a_i\neq i\) 的先剔除掉,这是容易的,与其他没被剔除掉的元素都交换一次,最后再与 \(=i\) 的位置进行一次交换即可,最后一定会剩下若干(可能为0)个 \(a_i=i\) 的没有被剔除的元素。
容易证明此时剩下的元素个数一定是 \(4k\) 或 \(4k+1\),考虑每次消掉4个变成相等的子问题。
通过打表可以打出当 \(n=4\) 时存在一种合法操作序列为:
1 2
3 4
1 3
2 4
1 4
2 3
于是可以通过前两个操作让4个元素与其他的元素都进行一次交换,最后会剩下0或1个元素,构造完成。
本题用的很多都是构造题的常见做法,通过构造证明有解是很常见的方法,需要先大胆猜一定有解,其次是归纳构造,通过可以转化为更小规模的等价子问题再讨论最小规模的子问题来归纳证明原问题。