广东省队集训

· · 算法·理论

讲课只记录了上课讲的,网上能找到的题目。标 ? 的是我不会的。

怎么收藏比点赞多啊?

相信我会慢慢更新的!

 

Day 1

T1 最小生成树 | Multi-University Training 2022 Contest 3 Spanning Tree Game

考虑 Kruskal 的本质是贪心。按边权从小到大扫描边,如果 u,v 不在同个连通块中,那么就合并 u,v 所在的连通块。

最小表示法记录每个点所在的连通块。状态数是 \text{Bell}(n) 个,带入 n=921147 个。

把所有边拆成两条排序后,对于在前面的那条,可以选择它是否存在;对于后面的那条,它必须存在。用 map<array<int, 9>, int> 记录下来转移即可。时间复杂度 O((n+\log\text{Bell}(n))m^2\text{Bell}(n))

 

T2 排列 | CCPC 威海 2021 C Assign or Multiply

见过一遍的 trick 啊,场上怎么忘了/ll

求出原根后,转化成模意义下的可达性背包问题。

考虑加入物品 v 的本质是用两个区间 [l,r] 去更新 [l+v,r+v]。考虑用哈希求出两个区间每一个不相同的位置。不同的位置有两种,分别是 0\to11\to0。只有 1\to0 是有用的。

再考虑另一种建模,连边 x\to x+v,这样会得到若干个置换环。置换环上 0\to11\to0 的边数相等,所以上面的更新中,每找到两个不同的位置,就会有一次实际的更新。而更新不超过 p-2 次。

树状数组可以动态维护哈希值,查询时分治即可。时间复杂度 O((n+p)\log^2p)

 

T3 排列 | PA 2022 Runda 5 Chodzenie po linie

考虑判断连通性,如果 \max_{1\le i\le r}a_i=r,那么 [1,r](r,n] 就不连通。这样划若干条分割线后会得到若干个连通块,对于每个连通块分别考虑。

将贡献 \sum_i\text{dis}(p,i) 拆成 \sum_{i,j}[\text{dis}(p,i)\ge j]。考虑从点 p 出发 j-1 步不能到达的点的形态,它们会构成两个左下 / 右上的区域。

两个区域是独立的,以左下角的为例,设这个矩形的右上角端点为 (x,p_y)。考虑递推 j\gets j+1 时的变化,x 会变为矩形区域外的点的横坐标 \minp_y 会变为矩形区域外的点的纵坐标 \min,容易发现这两个值分别只跟 x,y 有关,写出来就是 (\min_{p_u\ge p_y}u,\min_{v\ge x}p_v)。称这个过程为跳,最后会跳到 (1,1)

连边后可以得到一棵树,可以证明这棵树的点数是 O(n\sqrt n)

对于每个 (x,p_x),取其右下角纵坐标最小\sqrt n 个点,称这些点是好的。

对于跳到的坏点 (x,p_y),由于 p_y 已经取了上一步中 x' 右下角纵坐标最小的 \sqrt n 个点,但这个点是坏的,说明在 (x',x) 中存在至少 \sqrt n 个点被跳过了。而这样的跳跃至多发生 \sqrt n 次。

说明了从 (x,p_x) 出发跳到的坏点个数不超过 \sqrt n 个,所以总点数为 O(n\sqrt n)

考虑如果能建出这棵树,可以直接继承其父亲的答案,再加上自己的贡献。自己的贡献就是左下角的点的个数,有 n 次修改和 O(n\sqrt n) 次查询。可以用 O(\sqrt n)/O(1) 的分块平衡至时间复杂度 O(n\sqrt n)

建树可以用哈希表,但是模拟赛搬题人卡了这种做法,强制我们学习另一种。考虑给每个 x 维护一个 vector,其中按照顺序记录所有 p_y。前面说了,(x,p_y) 跳到的点的纵坐标是由 x 唯一决定的,且 x 越大,p_y 越大。只要倒着扫 x,判断 x'vector 的末尾是不是 p_y',不是就 push_back,这样就保证了 vector 中的元素单调递减,同时建出了树。

需要注意的细节是:加入 (x,p_x) 这个点时不一定单调;可能 x=x'

正着再扫一遍 x 统计贡献即可。

 

 

Day 2

T1 火力全开

b_i\gets b_i-1,这样问题转化成选择一个值域上的区间,使得区间内 \sum a 加上区间前 k 小的 c 的和最大。

建线段树,每个节点维护 \forall i\le k 时的答案 e_{p,i}。考虑怎么合并,只考虑跨过中心的贡献的话,右边的 \sum a 就一定会被算上,转移 e_{p,i}=\min_{1\le j\le i}(e_{lc,j}+c_{rc,i-j})+\sum a_{rc},其中 c_{rc,i-j} 表示 rc 中前 i-j 小的代价。

注意到这是 (\min,+) 卷积,并且 c_{rc,*}凸函数,所以可以分治决策单调性进行转移。

时间复杂度 O(n\log n\log k+qk\log^2k)

 

T2 异或症测试 3 | Petrozavodsk Winter 2023 Day 6 A The Best Problem of 2021

先用线性基判掉无界的情况。设 $f_i$ 表示 $n=i$ 时的答案,$g_{i,j}$ 表示元素值域在 $[1,2^i)$ 内,秩为 $j$ 的线性基的个数。转移:$g_{i,j}=g_{i-1,j-1}+2^jg_{i-1,j}$。 我们考虑把线性基消成标准的,即没**有一个元素包含其它元素的主元**。考虑第 $i$ 个元素,如果它是主元,那么只有一种方案;否则对于剩下的 $j$ 个主元,每个主元都可以选择是否包含它,方案数是 $2^j$。 计算 $f$ 时就是用全部方案减去线性基秩小于 $i$ 的方案:$f_i=2^{2^i-1}-\sum_{j<i}f_jg_{i,j}$。 有没有大神教教我 100 分啊/kel &nbsp; ### T3 树上邻邻域数点 #### $l=0

二分模板题。

l=1

考虑从下向上确定每个点的点权,如果是叶子,那么暂时先不确定。考虑某个非叶子节点 p,如果它有孩子是叶子,就把这些孩子放到集合 S 中。如果 S 非空,并且点 p 的父亲的点权也没确定,那么也把点 p 的父亲加入到 S 中。

考虑对 S 进行整体二分。先问出 (p,1,m-1)。对于 S 中除了最后一个点(这些点一定都是叶子),询问 (u,2,m-1),把这个结果与前面那个询问比较一下,如果有差异,那么就说明 a_u<m。确定了这些点后,就可以确定最后一个点的取值了。这样可以保证每个点都用了 \log V 次询问。

现在点 p 的所有孩子都已经确定了,如果点 p 还没确定,任取一个孩子 u,询问 (u,1,m-1) 即可。

l=2

感觉不是正常人出的,也不是正常人能写的。

 

 

Day 3 | 计数 DP

A 省选联考 2025 Day 2 C 封印

听懂了部分,不准备写。

看了两种本质不同的做法的题解,感觉都超出我的水平了。

 

B 省选联考 2023 Day 2 C 染色数组

听懂了第一问的部分,不准备写。

 

C IOI 2020 Day 2 A 装饼干

做法比较神秘。

从低到高考虑每位的限制。记 y 的第 i 位为 y_i

对于第 0 位的限制就是 a_0\ge y_0;对于第 1 位,从第 0 位多出来的 a_0-y_0 个饼干每两个可以兑换成一个,整理一下变成:a_0+2a_1\ge y_0+2y_1。归纳可以说明第 i 位的限制为 \sum_{j\le i}2^ja_j\ge x\sum_{j\le i}2^jy_j。预处理 c_i 表示前 i 位对 \sum_{j\le i}2^jy_j 的限制。

发现从低往高并不容易。考虑从高位往低位 DP,设 f_{i,b} 表示已经填完了高于 i 位的数,对第 i 位的限制是 \sum_{j\le i}2^jy_j\le b 的情况下,填前 i 位的方案数。

考虑转移,b 实时对 c_i\min

朴素实现复杂度没有任何保证。考虑按 i:0\to k 的顺序分别算出 f_{i,c_i}。然后在计算某个 i 时,如果 b\ge c_i,那么就可以直接返回 f_{i,c_i}。来分析一下复杂度:当 b<2^i 时,只会进入一侧递归;当 b\ge2^i 时,进入 f_{i-1,b} 的递归就会直接结束掉。所以时间复杂度 O(k^2)

 

D 1603E A Perfect Problem

做过,回顾了下。

 

E PA 2021 Runda 1 Od deski do deski

自己做没做出来,太难了。

考虑判定过程,设 b_i 表示前 i 个数能否被消完,转移:b_i=\text{or}_{j<i}[b_{j-1}\land a_j=a_i]

我们实际上只关心,[1,i] 能否被消完和所有 b_{j-1}=\tt{true}ja_j种类数,设 DP 状态为 f_{i,j,0/1},容易转移。时间复杂度 O(n^2)

 

F AGC022E Median Replace

考虑如何判定,从前往后扫,有些基本观察:

根据这些观察,考虑维护栈,这个栈只有 7 个状态:空,0,1,01,10,100,11。转移是容易的。

 

G The 3rd UCup Stage 34 C Median Operations

 

H NOI 2023 Day 1 T2 桂花树

 

I AGC064D Red and Blue Chips

待完成。

 

J AGC069D Tree and Intervals

 

K 924F Minimal Subset Difference

 

L USACO 22 FEB Phone Numbers P

 

M 1679F Formalism for Formalism

 

N 1740F Conditional Mix

 

O AGC008F Black Radius

做过,回顾了下。

 

P 集训队互测 2022 Range Minimum Element

 

Q AGC056B Range Argmax

待完成。

 

R NOIP 2024 D 树的遍历

做过,回顾了下。

 

S AGC035F Two Histograms

待完成。

 

T UNR #7 Day 2 B 反重:求熵

好像听懂了 n\le7,不准备写。

 

U NOI 2021 Day 2 C 机器人游戏

 

V NOI 2023 Day 1 C 深搜

 

 

Day 4

T1 树 | 1958I Equal Trees

我的 meet in the middle 做法(鏖战 4.5h)。直接枚举每个点选还是不选,时间复杂度 O(n2^n)。枚举 S\subseteq[2,m],T\subseteq[m+1,n],考虑能和 T 拼起来的 S 的形态。一个点 s 可以出现在 S 中,当且仅当 s 在两棵树中的祖先和 s 子树中出现的 T 集合中的点相同。

枚举 T,根据上述条件可以得出集合 A,使得所有 S\subseteq AST 均可以拼接。枚举 S,做高维前缀和,再枚举 T,时间复杂度 O(n2^{\frac n2})

最大独立集的做法。考虑保留一个最大的点集。点集 B 合法当且仅当 \forall i,j\in Bi,j 在两棵树上的祖先 - 后代关系一样。构造图 G,如果 i,j 在两棵树上的祖先关系不一样,那么连边 i-j

问题被转化成了求最大独立集。考虑记忆化搜索做法,DFS(i, B) 表示前 i 个点已经选择,它们的领域的并集为 B 的最大独立集大小。考虑分析这样的复杂度:

于是直接暴搜的时间复杂度就是 O(n2^{\frac n2})

 

T2 序列 | ARC066F Contest with Drinks Hard

考虑单组 O(n) 的做法。设 f_i 表示考虑了前 i 个数,强制第 i 个没选的方案数。

转移:f_i=\max_{j<i}f_j+\frac c2(i-j)(i-j-1)斜率优化即可。

再对后缀做一遍得到 g_i。考虑修改第 i 个点时,如果不选第 i 个点,那么贡献为 f_i+g_i。否则考虑 i 所在的段为 (l,r),那么贡献为 f_l+g_r+\frac c2(r-l)(r-l-1)

把式子整理成 a_l+b_r-clr 的形式。考虑分治,分治到区间 [L,R] 时考虑跨过 m 的贡献,只要维护 [L,m] 的凸包,查询 (m,R] 做 chkmax;对另一边再作一遍即可。时间复杂度 O(n\log n)

 

T3 栈 | 737F Dirty plates

似懂非懂/ll,有没有大神教教我啊/kel

 

 

Day 5

T1 图上的游戏

怎么被我秒了/tx

实际上求和后 $c_i\neq2$ 都没有贡献(因为 $u\to v$ 的贡献次数和 $v\to u$ 的贡献次数相同,并且贡献相反),只要考虑 $c_i=2$ 的点的贡献和即可。 考虑每个 $c_i=2$ 的点,记 $v_i=\text{out}_i-\text{in}_i$。每个点取 $0$ 的贡献就是 $c_i$,取 $1$ 的贡献就是 $0$。按照 $|v_i|$ 排序后,A 肯定取奇数排名的 $\max(v_i,0)$,B 肯定取偶数排名的 $\min(v_i,0)$。 直接计数 DP,设 $f/g_{i,x,y}$ 表示取了 $i$ 个点,这些点入度和为 $x$,出度和为 $y$ 的方案数 / 权值和。把可能的 $(m+1)^2$ 个出度入度二元组按照差排序。 转移时枚举 $i,x,y$ 和这个二元组选了几次,要乘上一些多重组合数的贡献,分配 $c_i=2$ 的点的编号,入度和出度对应的边的编号。输出时枚举 $x,y$,剩下的 $m-x/m-y$ 的入度和出度还要分配给 $c_i=0/1$ 的点。 &nbsp; ### T2 修理 | [UOI 2024 Zeroing the segment](https://www.luogu.com.cn/problem/P12559) 显然至少要操作区间中的 $2^{\max\text{highbit}}$ 次,于是把区间中的数按照 $\text{highbit}$ 分类。令 $k=\text{highbit}$,设操作一进行了 $2^k\le x<2^{k+1}$ 次,那么除了 $r-l+1+k$ 次之外,还要进行 $\sum[a_i>x]$ 次操作。也就是要最大化 $\sum[a_i\le x]-(x-2^k)$。 当这个式子 $>0$ 时,可以看作把 $a_i$ 和 $\le a_i$ 的数匹配,完美匹配后,失配的数的数量就是式子的值。因为是完美匹配,考虑 **Hall 定理**,最大匹配数量为 $n-\max _S\{|S|-|N(S)|\}$。 我们可以构造一个二分图,左部点集为 $\set{a_i}$,右部点集为 $1,\dots,n$,边集为 $\set{(a_i,j)\mid a_i\ge j}$,那么考虑 Hall 定理的时候,我们只需要考虑所有 $S=\set{a_i\mid a_i\le x}$,因为这个时候限制最严。那么 $r-l+1-\max(\set{a_i\mid a_i\le x}-x)$ 就是二分图的匹配数。 考虑扫描线右端点,查询时其实应该从右向左加入 $a_i$。于是我们强制加入右端点。如果此时没法在右部点找到匹配,那就要强制删去一个下标尽可能小的左部点。线段树维护 Hall 式子对于 $1\le x\le n$ 的值,找到横坐标最小,删去后可以使值均 $\ge0$ 的位置,并把它的匹配删去。用另 $\log V$ 棵**主席树**维护右部点的匹配。时间复杂度 $O(n\log V)$。 &nbsp; ### T3 人员调度 2 传奇 $k=300$,$O(k^4)$ Floyd 过 5s! 待完成。 &nbsp; &nbsp; ## Day 6 图论 ### A [PA 2025 Runda 1 Teleport](https://www.luogu.com.cn/problem/P11915) 自己做没做出来,太难了。 &nbsp; ### B [1656I Neighbour Ordering](https://codeforces.com/contest/1656/problem/I) 听懂了,但是我不会广义串并联图找哈密顿回路啊! &nbsp; ### C [Moscow Pre-Finals Workshop 2020 Day 5 M Travel Dream](https://qoj.ac/contest/1302/problem/6807) 待完成。 &nbsp; ### D [Xmas Contest 2022 H Happy Game](https://atcoder.jp/contests/xmascon22/tasks/xmascon22_h) 太神秘了,听不懂啊/ll &nbsp; ### E [Petrozavodsk Summer 2023 Day 4 C Many Many Cycles](https://qoj.ac/contest/1356/problem/7177) $O(m^2)$ 的做法很厉害。没听懂优化。 &nbsp; ### F [PA 2020 Runda 5 Trzy drogi](https://www.luogu.com.cn/problem/P9105) 臭名昭著的题目,怯战了。 &nbsp; ### G [ARC122F Domination](https://atcoder.jp/contests/arc122/tasks/arc122_f) 做过,回顾了下。感觉还是很困难。 &nbsp; ### H [CCPC Final 2022H Marriage II](https://qoj.ac/contest/1869/problem/9844) 我们二分图增广路真是太神秘了!但是我不会支配树啊/ll &nbsp; ### I [CF1284G Seollal](https://codeforces.com/contest/1284/problem/G) ~~拟阵是什么?~~ &nbsp; ### J [Petrozavodsk Winter 2021 Day 4 I Color](https://qoj.ac/contest/532/problem/895) 待完成。 &nbsp; &nbsp; ## Day 7 ### 畅游广州! ![](https://cdn.luogu.com.cn/upload/image_hosting/lsq77jke.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/jg5f6fsl.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/hw8odzz9.png) &nbsp; &nbsp; ## Day 8 ### T1 序列变换 第一次没做出 T1/ll 记 $b_i=a_{i-2}+a_{i-1}+a_i$,可以转化成一个长度为 $n+2$ 的序列做如下操作: + 操作一:选择两个 $\bmod\ 3$ 意义下相同的数,前一个 +1 后一个 -1 + 操作二:选择三个 $\bmod\ 3$ 意义下均不相同的数,要求后两个相邻,给它们三个都 +1 由于操作而会使 $\sum b$ 产生改变,所以操作二的次数是已知的,目标就是最小化操作二。 考虑倒序扫描序列,要求扫描到 $i$ 时,$(i,n+2]$ 均以操作为 $0$。 + $b_i=0$,不操作 + $b_i>0$,被迫进行操作一,记一下 $\bmod\ 3$ 意义下操作一还有多少个 +1 还没进行。 + $b_i<0

 

T2 追忆

听到题目名字,看到数据随机后,就怯战了。话说我单向 BFS 45 分,双向 BFS 怎么只有 15 分啊!

k 可以到达 O(\sqrt k) 个点。

对于编号不超过 \sqrt k 的点,这些点共 \sqrt k 个。考虑从任意一个点走一步,点的编号期望除以二。那么从 k 开始,期望跳 \log_2\sqrt k 步后会到达编号 \le k 的点。

因为每个点连出去两条边,所以跳的过程可以看成一棵 \log_2\sqrt k 层的满二叉树,树上也是 O(\sqrt k) 个点。

考虑取阈值 B,预处理出编号 \le B 的点两两之间的距离,这部分可以时间复杂度 O(B^{\frac 32}) 完成。

查询时暴力 BFS,到编号 \le B 的点就停止,这部分时间复杂度为 O(\frac{n^2}B)

B=n^{\frac45},可以平衡到 O(B^{\frac65})。但是这样需要离线。取 B=n^{\frac23},可以平衡到 O(n^{\frac43})。这样可以开的下 B^2short 用来预处理,访问比较连续,所以差不多快。手写 queue 卡卡常就通过了。

 

T3 小方的疑惑

先考虑 O(n^3) 做法。设 f_{u,i} 表示 u 子树中,从父亲处来了 i 的点权,子树内部分配点权的方案数。显然 f_u 是关于 i 的不超过 \text{size}_u 次多项式。维护这个多项式,合并时需要平移 a_u 个单位,可以用 a_u\sim a_u+\text{size}_u 这些点值代入两边卷积后,再插回来即可。还要做一遍前缀和。

注意到实际上有两种操作:前缀和平移。关于平移,对每个多项式 F_u 维护平移标记 b_u,表示还要复合上 x+b_u。做 j 次前缀和可以视为跟多项式 \frac1{(1-x)^j}=\sum_j\binom{j+i-1}{i-1}x^i 卷积。因此我们转而维护这个多项式:F_u=\sum_ic_i\binom{x+b_u+i}i

考虑如何合并 F_u,F_v(\deg F_u\ge\deg F_v)。在原先的 DP 中是直接卷积,但在这里正确的方式应该是代入点值,对点值卷积。不妨先把 F_v 的复合标记下传了。注意到:

\binom{x+b_u+i}i=\sum_{j=0}^i\binom{x+j}j\binom{b_u-1+i-j}{i-j}

用组合意义很好理解。所以复合标记可以 O(\deg^2F_v) 时间复杂度下传。

随后 F_v=\sum_ic_i\binom{x+i}i。考虑把 F_v 写成关于 z生成函数,即:

\begin{aligned} G_v&=\sum_jF_v(j)z^j\\ &=\sum_j\sum_ic_i\binom{j+i}iz^j\\ &=\sum_i\frac{c_i}{(1-z)^{i+1}} \end{aligned}

于是我们可以枚举 i,把 G_ui+1 次前缀和,然后乘以 c_i 贡献到答案多项式。

考虑如何给 G_u 作前缀和,记前缀和后的结果为 G_u'

\begin{aligned} G_u'(k)&=\sum_{j\le k}\sum_ic_i\binom{j+b_u+i}i\\ &=\sum_ic_i\sum_{j\le k}\binom{j+b_u+i}i\\ &=\sum_ic_i\left(\sum_{j\le b_u+k}\binom ji-\sum_{j<b_u}\binom ji\right)\\ &=\sum_ic_i\left(\binom{k+b_u+i+1}{i+1}-\binom{b_u+i}{i+1}\right) \end{aligned}

对于和式中的前者,可以看出它相当于从 [z^k]G_u 平移到了 [z^{k+1}]G_u';对于后者,可以视为是常数项,也就是说 [z^0]G_u'=-\sum_ic_i\binom{b_u+i}{i+1}。这样平移一次的时间复杂度是 O(\deg_u)

我们一共要平移 \deg F_v 次,总时间复杂度 O(\deg F_u\deg F_v)。只要保证 \deg F_u\ge\deg F_v,就可以树形背包分析到时间复杂度 O(n^2)

注意:其实我们要在每次合并完后对点值做一边前缀和,这可以视作点 u 有个初始多项式 F_u=1,这样与其它子树合并后效果就相当于前缀和了。

 

 

Day 9

T1 平衡树

将不含有关键边的极大连通块缩起来,会得到一棵只有关键边的树。又注意到,如果一条关键边的两侧都有别的关键边,那么它一定不会贡献到答案。再把这部分缩掉,可以得到一个菊花

记菊花的叶子的连通块权值和为 v,把 (\text{sum}-v)-v 放到 set 中,相当要执行 [l,r] 次操作,将最大值 -1,其余值 +1,使得 |v| 最小。

考虑先模拟前 l 次操作,可以二分上界或者取最大值不停与次大值合并。后面还可以进行至多 r-l 次操作。分 \max|v| 在正整数最大值和负数的相反数中讨论。如果是后者,还要再写一个二分。

时间复杂度 O(n\log n)

 

T2 上升树

传奇选手对值域 [1,n] 的数组离散化,而且离散化还写错了,Pre test 喜提 55 分!

考虑如何求出一棵树的 LIS,记 f/g_p 表示包含点 pp 子树内的 LIS / LDS。可以用线段树 + 启发式合并求出每个子树内的 LIS。

顺便记录 LIS 的端点,就能求出全局最长 LIS 的两端 u,v。显然要删除上的点。我们要对每个链上的点做换根,这很简单,只要把 u,v 当作树根分别做一遍即可。

时间复杂度 O(n\log^2n)

 

T3 并行程序 | PA 2020 Runda 5 Programowanie współbieżne

看懂了前四个子任务的题解。后面只能说:非常好 O(1),使我大脑旋转。

有没有大神教教我啊/kel

 

 

Day 10 数学

A 梦现时刻

配凑式 Ad-Hoc 浓度太高。

待完成。

 

B 1644F Basis

?

 

C XXI Open Cup Stage 14 H Harsh Comments

做过,当时还是 O(n^3) 的 min-max 容斥做法,回顾了下。

 

D AGC034F RNG and XOR

待完成。

 

E 集训队互测 2024 欧伊昔

懂了 mex 的子任务,没太懂后面的随机化。

 

F Xmas Contest 2020 D Determinant

?

 

G 集训队互测 2021 愚蠢的在线法官

?

 

H JSC 2023 Final H Adjacent Binomial Coefficients

?

 

I World Tour Final 2019E e

?

 

 

Day 11

T1 这是第一题

大战网格的一天!

就是要求 SG 值,SG 值域为 [0,3],对每行前后缀扫,维护前缀 / 后缀的函数即可。时间复杂度 O(n^2/n^2\log n)

 

T2 这是第二题

赛场上的错误思路:注意到操作五很麻烦。对于前四种操作,都可以行列拆开。尝试对操作五也进行行列拆开,构造操作 1',2',3',4' 使得 51=1'5,52=2'5,53=3'5,54=4'5,而 55=13,这样就能把操作五换到一起,然后消掉。

这样再把行列按照 \bmod\ 4 分类后,确实可以构造出来。但是问题是后面没法进行置换的快速复合。

把网格无线翻折,铺满整个平面,但是染色仍然是奇偶染色。这样操作 2,4 就是对所有网格都操作,不用特殊考虑边界。1,3,5 操作都是可以正常进行的。并且由于网格是无限的,只要取出 4\times4 的方格作为代表元,模拟这些数。其它数都可以由这 16 个数推出。

 

T3 这是第三题

有没有大神教教我啊/kel

 

 

Day 12

T1 硬币

做了好久啊,只会个不知道正确性的做法。

考虑什么时候可以一次操作完成。排序后,第 i 元素要 \ge i-1。于是不停进行如下操作:

 

T2 厵神

log 比根号慢/fn

记题目中的两个点分别是 (sx,sy),(tx,ty),两个时刻分别是 s,t,不妨认为 s\le t,这种情况显然更强。两维都有限制很难处理,想办法把限制拆开。对每条路径,我们可以枚举走了 i 步是横着走的,其它步是竖着走的,这样两维就独立了。

a_{i,x,x'} 表示只考虑在一行中横着走,走了 i 步从 x 走到 x' 的方案数,b_{i,y,y'} 表示只考虑在一列中竖着走,走了 i 步从 y 走到 y' 的方案数。答案可以写成:

\sum_{x,y}\sum_i\binom tia_{i,x,tx}b_{t-i,y,ty}-\left(\sum_i\binom{t-s}ia_{i,sx,tx}b_{t-s-i,sy,ty}\right)\sum_{x,y}\sum_i\binom sia_{i,x,sx}b_{s-i,y,sy}

考虑求出 c_i=\sum_yb_{i,y,ty},也就是在一个二维平面上从 (0,ty) 开始,不能触碰直线 y=0y=m+1。每次向右上方 / 右下方走一个单位直到 x=i 为止。要对 1\le i\le t 都求出 c_i

f/g_i 表示第一次触碰直线是走了 i 步,触碰了直线 y=m+1/0 的方案数。记 \text{calc}(x,\Delta y) 表示走了 x 步,横坐标移动量为 \Delta y 的方案数。有递推式:

\begin{cases} f_i=\text{calc}(i,n+1-y)-\sum_{j<i}(f_j\text{calc}(i-j,0)+g_j\text{calc}(i-j,n+1))\\ g_i=\text{calc}(i,y)-\sum_{j<i}(g_j\text{calc}(i-j,0)+f_j\text{calc}(i-j,n+1)) \end{cases}

显然可以分治 NTT 直接处理,但是常数太大了。考虑写成生成函数:

E_f=\sum_i\text{calc}(i,n+1-y)\\ E_g=\sum_i\text{calc}(i,y)\\ H_0=\sum_i\text{calc}(i,0)\\ H_1=\sum_i\text{calc}(i,n+1)\\ \begin{cases} E_f-H_0F-H_1G=0\\ E_g-H_0G-H_1F=0 \end{cases}

可以解出:

\left(H_0+\frac{H_1^2}{H_0}\right)F=E_f-\frac{E_gH_1}{H_0}\\ \left(H_0+\frac{H_1^2}{H_0}\right)G=E_g-\frac{E_fH_1}{H_0}

多项式求逆即可。那么就容易求出 c_i=2c_{i-1}-f_i-g_i

在考虑求出 b_{i,sy,ty},也就是把终点改到了中间,但是这里没有在 b_jb_i 之间转移,所以可以直接多项式乘法解决。

时间复杂度 O(n\log n),需要乘法的次数较多,常数较大。

官方做法是根号分治

平衡后时间复杂度 O(n\sqrt n)

 

T3 区间压缩

区间的长度可以这样表示:

把区间转化成括号,令下标相同的左括号在右括号前面。区间的宽度就是 () 子串的数量。

可以构造性证明,如果原区间包含第 a 个 ~ 第 b 个子串,那么 [s_i,t_i]=[a,b]。容易发现不能更小。

问题转化为求出所有子序列中 () 个数的总和。由于是合法括号序列,所以除了空串外,可以转化成 )( 个数加一。

这样转化的好处时,询问的是一个区间,截取后不完整的区间可能是前缀左括号被删去或者后缀右括号删去,不会影响贡献的计算。转成概率计算,扫描线 (,在线段树上维护所有 ) 和当前 ( 构成 )( 的概率和历史和。可以好用线段树+矩阵乘法维护。时间复杂度 O((n+q)\log n)

 

 

Day 13 树上问题

T1 ICPC 济南 2023 B Graph Partitioning 2

秒了 O(n\sqrt k)O(n) 挺厉害的。待完成。

 

T2 Petrozavodsk Summer Camp 2019 Day 2 J Jiry Matchings

?

 

T3 150E Freezing with Style

做过 O(n\log^2n) 单调序列启发式合并做法,回顾了下。

 

T4 浙江省选 2019 Day 1 B 语言

做过,回顾了下。

 

T5 Ynoi 2008 rdCcot

?

 

T6 Ynoi 2011 成都七中

?

 

T7 Ynoi 2008 rplexq

?

 

T8 2022 集训队互测 树

?

 

T9 The 2nd Ucup Stage 24

?

 

 

总结

四道不会的模拟赛题:

有没有大神教教我啊/kel

感觉来广州状态不好。前四场每场只会 T1,但发现 T2 都不难。后面四场开始狂冲 T2,产生了若干次差点时间导致 100 变 0 的惨状。在最后一场比赛的最后一分钟,终于首次通过 T2。

模拟赛题目质量还是可以的,但是部分分设计经常有问题,这样使得会做和不会做差异特别大,可能我不能要求太多。还是没学会攻击交互库,这很遗憾了。 讲课难度非常不均衡,可能有些感觉太难了,我就直接放弃了。让我思考,对于快要打 NOI 的选手,讲课到底有没有用。

这个活动各个方面,办的都还是挺好的。特别是茶歇室!从来没见过这么好的设计。终于久违的踢上了球,虽然实力下降实在太多。

这个月,打了特别多特别多的模拟赛。终究还是迷失了。

最后获得铜牌 rk35,虽然拿银牌其实比较容易,但是离金牌还有些距离。加油吧!