2026暑假ZR B班
Day1(DP)
寿司晚宴
首先有一个朴素状压,设 \(f_{i,s,t}\)为考虑前i个数,当前A的素数集合是s,B的是t的方案数,状态数显然爆炸。有一个经典trick,就是根号分治,一个数只有一个大于 \(\sqrt n\)的素因子。显然,小的可以状压,大的按大质数排序后分组,我们可以多记一个0,1,2表示当前组的质数归谁了。
Galaxy Generator
首先考虑星系数怎么算,首先有两个在一维连成直线,又有一个点这一维的点坐标在两点之间,那么三个点就可以联通,注意到,如果两个矩阵再某一维上有交,就是联通的,自证不难。那么我们就需要计算 \(f_{lx,rx,ly,ry}\)表示在这个矩形内部,点刚好合并成这个矩形的方案数。然后这个怎么转移呢,考虑整体减空白,记录
Day2(string)
xor-mst
考虑kruskal,每次选出边权最小的边,考虑在trie上,lca越深,异或值肯定越小。那我们对于一个有两个儿子的节点,肯定先连通两个子树内部,再用一条边连接两个子树,再把这个节点连接两个子树之一。第一步直接递归子问题,第二步需要将其中一个子树的所有点在另一个子树内贪心,这个的复杂度是 \(n\log^2n\),因为每个点只会被他的祖先计算,而树高是\(\log\)的,每次贪心的复杂度也是\(\log\)的。
freinds
考虑二分第k大,然后check就是枚举a_i,在trie上二分,计算答案也是一样。
Palindrome Partition
首先有一个神奇构造,就是考虑首尾交替重拍,形如 \(a_1,a_n,a_2,a_{n-1},...\),这样就转为了经典回文串划分问题。考虑建出PAM,然后暴力dp,转移就是枚举所有的回文后缀,这样显然是爆掉了。主要到回文串的回文后缀一定是border,所以就可以使用等差数列优化,每个等差数列分开转移,发现每个等差数列的转移只差了一项,所以是\(O(1)\)的,时间复杂度\(O(n\log n)\),\(\log\)是每个等差数列都要维护。
逆にする函数
考虑这个映射有什么性质,发现跟回文串很相似,第一个,就是如果 \([i,j]\) 是合法的,那么 \([i+1,j-1]\)是合法的;第二个,如果一个合法的区间内部有一个合法的区间,那么这个区间的对称区间也是合法的,因为结构完全相同。那么就可以考虑马拉车了。对了,对于一个区间计算答案是好做的,因为映射是唯一的,所以方案数就是跟自由元也就是不在这个区间的数有关(\(m^c\))。马拉车的具体过程中,我们需要扩展/缩小区间,缩小是因为普通的马拉车可以直接更改区间长度,但是这个具有信息,所以要一步一步缩小。可以考虑维护一个数前/后面第一个与它相等的位置,就可以\(O(1)\)修改了,然后缩小的复杂度也是 \(O(n)\)的可以手推证明。
扩展kmp(Z函数)
用途:求一个串的所有后缀与其本身的lcp。
做法:
Day3(数论)
因子相关
约数个数是 \(O(\sqrt[3]{n})\)级别的,有一个恒等式,$$\sigma_k(xy)=\sum_{i|x}\sum_{j|y}[\gcd(i,j)=1] (\frac{xj}{i})^k,\sigma_k(x)是x的所有约数的k次幂的和$$,考虑如何证明,由\(\sigma\)是积性函数,所以只需要考查素数幂次的值,
筛法相关
狄利克雷前/后缀和:\(f_i=\sum_{j|i}g_j\),这个可以\(O(n\log\log n)\)求出,具体做法就是ba。
Day4(图论)
网络流
上下界网络流
无源汇可行流:假设所有边都流满下界,然后我们将每条边的流容量设为上界减去下界(这样肯定会有问题,因为有可能点的出入流不平衡),那么对于一个点,有三种情况,第一种是入流大于出流的,那我们就需要源点流对应的差值;第二种是入流等于出流,不连;第三种是出流大于入流,那么我们就要流给汇点对应的差值。建完图跑最大流,看看是不是满流就行了。
有源汇可行流:相当于源点和汇点不需要满足收支平衡,所以建一条inf边从汇点流回原点,再跑无源汇就行了。
有源汇最大/小流:先跑一遍可行流,然后删掉汇点流回源点的边,再在残量网络上跑最大流最后两个相加/减即可(最小流要将源汇交换)。
上下界费用流:把最大流换成费用流就行。
技巧
退流:我们要删掉一条边的话,需要消除这条边对流量的影响,多出来的流量肯定是s to u和v to t的路径上,那我们只需要u to s和t to v把流量退回去就行了。
如果一条边的费用是一个关于流量的凸函数,那么我们可以把这条边拆成容量为1的一些边,然后边权是导数,由于导数是单调的,所以正确性没有问题。
Hall 定理:二分图存在完美匹配,当且仅当对于这个二分图的所有左部点集合,这个集合的邻居集合的大小要大于等于这个集合的大小。
常见模型
文理分科模型:将一个集合划分成两部分,每个元素u分配到其中一个部分i有相应代价\(a_{u,i}\),在不同部分的两个元素u,v也有相应代价 \(b_{u,v}\),一个点向源汇连边,最终残量网络上如果与s相连就划分到第一部分,与t相连就划分到第二部分,跑最小割即可。
切糕模型:每个元素都有一些取值,每个取值都有代价,有限制(x,y,f),表示如果x的取值为i,那么y的取值不能少于f(i)。对于每个点,建出
Day5(Ad-hoc)
Half Queen Cover
考虑从小的开始手玩,首先1和2的只用放一个,3的只需要在左上角和右下角放就行,4的在3的情况下还是在右下角加一个,5的话就是下面的图
,6/7个分别为右下角再加1/2个点......。考虑这样构造的规律是什么,我们会发现每三个一组,就会有一个会对答案节省1。考虑证明,首先我们放k个皇后,肯定能占据k行和k列所以剩下(n-k)(n-k)的部分需要通过对角线填补,显然这有2(n-k)-1个对角线,每个皇后只能吃到一条对角线,所以就有2*(n-k)-1<=k,即 \(ans=\lceil \frac{2n-1}{3}\rceil\),那么只有再\(n \bmod 3=2\)时取整,符合之前的规律,现在只需要考虑这些数,发现8的构造是这种
。规律已经非常显然了,先用\(\lceil k/2\rceil\)个维护好上面的行列,然后再用剩下的再占领行列并把空的对角线占领。
Adjacent Difference
考虑1/2怎么做到,肯定是两种情况的和一定,然后取最小值。首先看到相邻的网格,立马想到黑白染色,然后首先将黑点变成最近的d,所有白点变成最近的0(在模2d意义下),这样可以满足相邻差距>=d的限制,但是次数是\(dn^2\)的,考虑最开始说的。如果当前不合法,我们再做一次,这次黑点变成0,白点变成d,由于每个点两次一共的操作次数是d,所以一共是\(dn^2\)的,肯定会有一种方案满足条件。
choosing points
Day6(数学)
概率和期望
Day7(分治)
Jewel heist
考虑对从下到上进行扫描线,如果我们钦定一种颜色不能选,
浙公网安备 33010602011771号