前言:写于2024年暑假中山集训期间,如果有误,望指出。
20240729 D1
感觉今天整体还行,T1一眼题。T2胡了一个dp,死在没考虑到优化状态。T3裴蜀定理(忘了),T4建模Johnson。
- dp 有点死板,可以考虑从不同的角度设计 dp 状态,比如交换 dp 的维度和其维护的值。
- 数论还是需要巩固,
竟然连裴蜀定理都不记得了。 - 图论建模是关键,还需要加强训练。
20240730 D2
对于上午的dp,还是老问题:状态设计死板。觉得dp还需要巩固的:
- 数位dp
- 各种优化,包括但不限于斜率优化,四边形不等式,单调队列。
- 还需要多加练习
下午是图论基础,感觉还不错,收获了一些神奇思路:
- 部分题可以考虑拆点转换为全1的bfs,吞掉 一个 \(\log m\)。
- 跑分层图最短路是,如果有负边,但是只在层与层之间,可以考虑对于每一层跑 dijkstra,降低时间复杂度。
- 像 Johnson 一样利用换元思想,可以将负边权转换为正的,这样可以使用 dijkstra 来代替复杂度更高的 spfa。
差分约束
这里总结一下 差分约束 系统:
它是有若干基本形式的不等式构成:
可以将这个式子转换为:
考虑使用将一些式子代入其他式子,然后通过不等式的传递性可以发现这好像与最短路有关:
考虑从 \(u_i\) 连一条边权为 \(w_i\) 的边到 \(v_i\),对于两个点 \(i,j\) ,令 \(i\) 到 \(j\) 的最短路为 \(dis(i,j)\) 可以发现它们满足以下式子:
那么如果我们确定了其中 \(x_i\) 的值,就可以得到 \(x_j\) 的上界。同理,这样知道一个数的值,那么我们可以求出所有与其有关点的上界,当然如果有一个点使得 \(dis(i,i)< 0\) 那么说明该系统无解,因为不可能存在 \(x_i\leq x_i+w_i,(w_i<0)\)。
如果打算求其下界,那么将原式转换为:
这样我们将边权和边的方向取反后跑最长路就行,但是最长路是将边权取反,跑最短路,然后将答案取反后的值,于是解决该问题只需要反转边的方向然后跑最短路,最后将答案取反即可。
20240731 D3
又是模拟赛,感觉我不得行。
T1是奇妙数学题,形式化一下就是:
现在只考虑求和号内的:
后面可以等差数列求和,但是前面是一个自然数二次幂和,赛后知道 \(\sum\limits_{i=1}^ni^2=\frac{n(n+1)(2n+1)}{6}\) 但是赛时的我不知道,于是花了 1.5h 推式子,我是通过分治的思想,假设我们要求 \(\sum\limits_{i=l}^r i^2\),那么可以取区间中点 \(mid=\frac{(l+r)}2\) ,然后将序列转换为:
将式子暴力拆开得到 (令 \(i=mid\) ):
可以发现 \(i\) 的一次项系数要么为 \((l-i)\),有么为 \((r-i)\),所以这一层可以 \(O(1)\) 求解,然后转换为两个区间砍半的完全一样的子问题,然后可以分治求。时间是 \(O(\log n)\) 的。
推广一下,如果是求 \(\sum\limits_{i=1}^n i^k\) 那么依然可以考虑分治,因为每一层只会留下不超过 \(k\) 项,用二项式定理展开以后可以找到规律,这样复杂度是 \(O(k\log n)\) 的,虽然劣于 \(O(k)\) 的拉插,但是比较适合不会拉插的同学零时应急使用。
T2一眼题,不说。
T3警示可以依据时空和数据范围猜算法。
20240801 D4
上午是字符串,感觉还不错,主要是字符串练习了不少,但是对于 Manacher 和 Z函数的理解不够深刻,还有就是 kmp 和 AC自动机衍生出来的 fail 树的运用。
下午是贪心,最大收获来自反悔贪心:
反悔贪心
他类似模拟网络流,网络流是建反边来做到反悔的,而反悔贪心则是记录前面的选择,在一次决策是,如果发现无法加入,可以考虑删掉前面决策中最劣的一个,看看是否会更优。
Exchange Argument
交换贪心寒假dottle讲过,这个主要是用在如果交换相邻两位不会影响除了这两位以外的任何一个,那么可以考虑看在什么情况下交换以后更优秀,以此推到出应该按照什么来排序,需要注意的是判断式需要有传递性。还有就是对于式子 \(\max(a,b)>\max(c,d)\) 满足必须满足 \(a>c\&\&a>d\) 和 \(b>c\&\& b>d\) 之间的一个,有时可以通过这个拆掉 \(\max\) 和 \(\min\) 的式子。
20240802 D5
一句话总结:我唐完了!!!
T1可以说是一眼题,类似记忆化搜索的模拟(我在说什么?)可是最后死在了等比例缩放上(改了3.5h+没改出来,直接导致心态炸裂)。
T2原则上是可以推出来的(但不一定能码对),但是因为T1的影响,没有仔细思考,同理还有T3的40分+T4的30分。
这套题还行,警醒我以后要合理分配时间,不要因为某道题没改出来导致心态崩了,暴力一定要打。
在算法上的启发是:没有单调性的地方也可以二分查找,参考T3或 Problem - E - Codeforces ,同样是dp的优化:通过改变目标函数以达到缩小状态数的目的。
(码力不行,写了3个暴力,一个都没调出来,喜提0pts)。
20240803 D6
上午讲的是数据结构,感觉收获不大,主要是没有什么新的trick,但是可能要将树分块上日程了。
下午是组合数学,收获好像也不是很大,但是我知道我的数论是不行的,要加训。
20240804 D7
又是被T1薄纱的一天,一开始T1花了1.5h调,没调出来,吸取上次的教训先去写了后面的暴力,然后又花了近1h重构T1(虽然最后过了,但是洛谷0pts,大抵是数据水),T2胡了假贪心,T4数组开小了又挂了20pts。
20240805 D8
上午DS,主要问题在于对模型的剥离与搭建不太熟练,一句话就是:只会板题
下午网络流,问题主要在减免。
20240806 D9
上午是数论,关于组合数学的式子,对于我来说应该从组合意义出发可能更方便记忆,下面从组合意义角度(如果可以)总结一下组合数的性质:
- \(\begin{pmatrix}n\\m\end{pmatrix} =\begin{pmatrix} n \\ n-m \end{pmatrix}\) 原来是 \(n\) 中选 \(m\) 个,变形后可以理解为从 \(n\) 中选 \(n-m\) 个不选。
- \(\begin{pmatrix} n \\ m \end{pmatrix}=\begin{pmatrix} n-1 \\ m \end{pmatrix}+\begin{pmatrix}n-1\\m-1\end{pmatrix}\) 这可以理解为固定一个数的情况,如果选这个数,那么只需要从另外 \(n-1\) 选 \(m-1\) 个;如果不选这个数,那么需要在另外 \(n-1\) 个数中选 \(m\) 个。同时这也是杨辉三角的递推公式。
- \(\sum_{i=0}^n \begin{pmatrix}n\\i\end{pmatrix}=2^n\) 这类似状压枚举。
- \(\sum_{i=0}^m\begin{pmatrix}n\\i\end{pmatrix}\begin{pmatrix}m\\m-i\end{pmatrix}=\begin{pmatrix}n+m\\m\end{pmatrix}(n\geq m)\) 可以理解为将原集合划分成长度为 \(n,m\) 的两段,分别枚举从这两段中选几个,根据乘法原理计算。
- \(\sum_{i=0}^n\begin{pmatrix}i\\k\end{pmatrix} =\begin{pmatrix}n+1\\k+1\end{pmatrix}\) (组合意义未知)。但是可以从杨辉三角上考虑,因为 \(k\) 一定,那么这些数在一条对角线上,通过杨辉三角的计算方式可以推出
- \(\sum_{i=0}^n (-1)^i \begin{pmatrix}n\\i\end{pmatrix}=[n==0]\) (组合意义未知)。
- \(\begin{pmatrix} n \\ k \end{pmatrix} =\frac{n}{k} \begin{pmatrix} n-1 \\ k-1 \end{pmatrix}\) (组合意义未知)。
容斥是个好东西,可以从小学三年级研究到高中三年级,主要思想大概是反着来减去不合法的。但是对于 Min-Max 容斥、反射容斥等还有待深究。
二项式定理
\((a+b)^n=\sum_{i=0}^n\begin{pmatrix}n\\i\end{pmatrix}a^{n-i}b^{i}\)
这是个很优美的式子,因为这将多项式和组合数学联系在一起了,因为对于 \(a^{n-i}b^i\) 的系数可以理解为从 \(n\) 项中选 \(n-i\) 个 \(a\),另外的是 \(b\)。
卡特兰数
和很多计数问题有关,举几个例子:
- \(n\) 个点可构造的不同二叉树个数
- 长为 \(2n\) 的合法括号序的个数。
形式化定义是:
具体参考多项式。
下午模拟赛:当时赛时策略是主攻 T3,T4(数组开小,挂了10pts),因为当时我可以确定这两个是我会的DS,T1很明显是二分+状压DP,但是DP没有推出来。对于不会的题,赛时策略是先攻部分分,然后从特殊性质下手考虑正解。
20240807 D10
模拟赛T1原则上是应该场切的,但是死在了二维差分,所以对于一些基础的数据处理要牢记,例如:高维差分/前缀和,二分等。
20240808 D11
上午是图论专题。
竞赛图这是一类特殊的有向图,及两两点间均有一条连边,可以证明将竞赛图缩点以后是一条链,对于部分题可能会用到这样特殊的性质。
下午讲的是计数专题,对于计数的几种方法:
- 直接暴力枚举
- dp
- 容斥
- dp套dp
- 组合数
等等。
这里主要总结一下dp套dp:
dp套dp
这是dottle讲过多次的,对于一部分计数我们可以考虑如何使用最简单判定一中情况是否满足条件,那么可以将这个建成一个自动机,然后在外侧dp是在自动机上转移,例如P5279 [ZJOI2019] 麻将 (可能有点难,不一定总结的好)对于这个,我们将所有的牌型压到内部的那个dp自动机中,然后我们在外面的dp上游走,但是我们发现内部dp直接转移的话状态过多,并且有若干无用状态,于是可以先跑一边自动机,用一个map压状态。
20240809 D12
对于今天的模拟赛T4展露出对组合数的不熟。
待处理:
- 裴蜀定理、欧拉定理、威尔逊定理、中国剩余定理等数论基本知识
Johnson(已学20240730)- 巩固数位dp
- 巩固dp优化,主要是学习一下四边形不等式(还不会)
- 复习Manacher和Z函数
- 树分块
- 容斥:Min-Max 容斥、反射容斥等
- 斯坦纳树
- 平面图欧拉公式
- 组合数学