2023.2.1 省选模拟赛总结

1.时间安排

7:30~9:00

浅看题面:T1轻工业数据结构,T2数学题,T3重工业数据结构。

T1是和最大值相关的,联想到笛卡尔树,可以先求一遍单调栈,问题就转化为了求从左侧和右侧的区间各选一个匹配和为当前最大值的对数。

这个东西显然可以枚举一半另一半用主席树查找,所以复杂度为 \(logV*\sum_{i=1}^n min(i-L[i], R[i]-i)\)

后面的这个东西可以用笛卡尔树子树大小每次折半可以证明出上界为 \(nlogn\),所以复杂度上界为 \(O(nlognlogV)\)

上午猪脑过载没想到可以离线后差分,可以做到 \(O(nlogn*hash)\),不过卡了卡常大样例只跑了800ms左右,就不管了。

9:00~10:30

以为T2是个一眼 \(n^2\) 题,就尝试用组合数去推,把小样例过掉,但是写了状压暴力却没拍上,仔细思考漏算了许多合法情况,主要在于提取出匹配的括号后怎么保证剩下的部分不会产生贡献且不会被算重,搞了很久没结果,写了 \(n^3\) 暴力DP赶紧开T3。

10:30~12:00

与割点相关肯定是圆方树,但是分类讨论太复杂就先从 \(n^2\) 入手,发现 \(n^2\) 也很难做就先写 \(n^4\) 暴力。

之后想 \(n^2\) ,想用每个点去贡献其他点,最后用总点数-不能到达的点数就是答案。

先求边双缩点,然后dfs一遍求出dfs序,这样就可以枚举每个点成为防御工事,每次贡献的是dfs序一个区间的边双分量,用差分即可。

很遗憾到考试结束也没调出来,也没时间想T2了。

result:

T1:100 T2:20 T3:20

%Larunatrecy AK

2.总结

T1:

吃饭时才知道正解是分治,不过复杂度都是 \(O(nlogn*hash)\),而且我的卡不满似乎更优?

之后试着构造出一组数据,n=5e5时最多构造出了4e6的移动距离,Larunatrecy跑暴力DP求出我的上界是6e6左右,确实远远不到 \(nlogn\),可以记成结论。

upd:写了离线版本,喜提最优解,薄纱标算。

T2:

妙妙格路计数题。

先考虑给出一个序列如何求出其价值,一种构造是把左括号看做1,右括号看做-1,左括号出现次数是 \(x\),最小前缀和(要考虑0)是 \(y\) ,则其贡献是 \(n-x+y\),容易证明正确性。

对于确定的价值 \(z\) ,我们可以求 \(\geq z\) 的所有方案数,用差分求 \(z\) 的方案数。

抽象成格路计数问题,枚举左括号出现次数 \(x\),可以转化为从 \((0,0)\) 出发走到 \((n, 2*x-n)\),每次只能走 \((1,1)\)\((1,-1)\),且路径不能与 \(y=z+x-n-1\) 触碰的方案数。

通过旋转坐标系可以转化成一般形式的格路计数问题,详细过程就不放出了,给出化简结果为 \(C_n^x-C_n^{n-z+1}\)

求和就是 \(\sum_{i=z}^{n-z} C_n^x-C_n^{n-z+1}=\sum_{i=z}^{n-z} C_n^x-(n-2*z+1)C_n^{n-z+1}\),直接预处理组合数及其前缀和即可(上下界可以自行证明)。

Tips:有不能触碰的直线的格路计数问题公式

设要从 \((0,0)\) 走到 \((n,m)\),每次只能走 \((1,0)\)\((0,1)\),且不能与直线 \(y=x+b\) 触碰的方案数位:

\[C_{n+m}^n-C_{n+m}^{n+b} \]

证明参考博客

T3:

圆方树+虚树+换根DP(真的想象不到Larunatrecy在写这题时经历了什么,我调了1.5h+……

先建出圆方树,题意转化为求当某个点为根时所有圆点子树内圆点个数的和,再去最小值,这个可以很容易用 \(n^2\) 换根DP求出。

\(n\) 比较大时考虑每次询问建出虚树,容易证明最终答案一定是取虚树上的点为圆方树上的根,进一步可以证明虚树边上的圆点只需要取最接近两端的(容易发现虚树边上的换根过程是一个保持不变一次函数,为了避免讨论正负干脆取区间两端点,因为是一次函数所以一定能取到区间最小值),大力分类讨论即可。

posted @ 2023-02-01 19:26  Displace  阅读(24)  评论(0)    收藏  举报