2025 山东一轮省队集训

D1T1

若前 \(r\) 行和前 \(c\) 列已经确定,则剩下的格子全都确定。

考虑怎么判定前 \(r\) 行和 \(c\) 列确定的格子符合条件,有一些形如和相等的限制。可以发现左上角的 \(r \times c\) 的网格的每个格子要么一列等差数列编号都相同,要么一行等差数列编号都相同。可以 \(O(3^{rc} \times \operatorname{poly}(r,c))\) 的复杂度,我场上写的是 \(O(2^{rc+2c}\times \operatorname{poly}(r,c))\)

D1T2

枚举 \(i,j\) 使得 \(dis(i,j)\) 符合条件,则要求的是 \(i,j,k\) 使得 \(i,j\) 的距离为中位数。

先考虑计算 \(dis(i,j)\) 为严格中位数的答案,然后再考虑等腰和等边三角形。等腰或等边是比较容易的。

严格中位数的贡献考虑将曼哈顿距离换为切比雪夫距离,变成二维数点。复杂度 \(O(n^2 \log n)\)

注意到给定的距离限制很强,只有不超过 \(\dfrac{1}{20}\)\((i,j)\) 符合条件,所以常数可以接受。

D1T3

考虑 \(k=2\) 时,即求 \(L(G)\) 的最大匹配,答案等于原图每个连通块边数除以二下取整求和。

\(3 \leq k \leq 6\) 时可以分类讨论贡献。

\(k=7\) 时先将 \(G\) 变为 \(L(G)\) 然后做 \(k=6\)

D2T1

类似 DAG 容斥,将过程分层,每次剖离最后一层。

\(f_i\) 表示 \(i\) 个点的图成功的概率,转移枚举最终扩展到 \(j\) 个然后无法扩展,复杂度 \(O(n^2)\)

D2T2

将询问拆成弦图,所以要做的只有直角三角形,其中直角边平行于坐标轴。

按照 \(x\) 扫描线,应该只需要维护凸包。

D2T3

首先可以视作 \(q_i = 1\),最后答案乘以 \(\prod p_i^{q_i - 1}\)

如果所有 \(p_i \geq m\),直接容斥。容斥不需要枚举子集,原因是只有 \(|S|\) 有意义而具体的子集是什么不重要。

对于 \(p_i < m\) 的爆搜,搜出所有状态后对大的做容斥。

这样过不去,考虑分 \(p_i < \dfrac{m}{2}\)\(p_i \geq \dfrac{m}{2}\)\(p_i \geq \dfrac{m}{2}\) 时注意到中间会有一个区间只会被选择一次,爆搜记录状态时只需要记录两侧的状压和中间的数量,状态数小很多,可以通过。

D3T1

如果顺序固定,容易现行计算答案。

考虑 Exchange Arugument,发现如果每个点独立,按照 \(\dfrac{c}{1-p}\) 排序就对了。

树上问题,按照 01 on tree 的做法就行了,即用优先队列和并查集维护点和父亲的合并。

赛时爆精度了。

D3T2

对最终位置向上下左右四个边界建立二分图做匹配,若能匹配则必然有解,构造只需要维护消环的过程即可。

D3T3

不会。

D4T1

做法 \(1\):枚举每种颜色,对能染色的还没染色的格子 \((i,j)\) 连边 \(i \rightarrow j\),跑二分图最大匹配并把所有匹配边选上。复杂度理论上不太对,但能过原版数据。

做法 \(2\):std 做法:枚举每种颜色,按照上述连边但不跑二分图最大匹配而是跑稳定婚姻系统。复杂度 \(O(n^3)\)

做法 \(3\):初始化 \(a_{i,j} = (i+ j-1) \bmod n\),在上面做调整,复杂度也不一定对,但也能过原版数据。

D4T2

直接分块,每块维护 Trie,查询时一起二分,复杂度是 \(O(n\sqrt n \log V)\) 的,需要卡常,我卡不过去。

维护压缩 Trie 就可以把 \(\log\) 放进去,但我不会。

D4T3

不会。

D5T1

\(m\) 为奇数时,带权重心唯一,枚举可能重心 \(u\),考虑计算有多少树使得 \(u\) 为重心,考虑把 \(u\) 的邻点的子树大小拉出来,最多只会有一个儿子的子树大小超过一半。枚举是哪个可以简单做到 \(O(n^2)\),注意到这个过程本质上是在算一个大小为 \(s\) 的连通块,超过 \(m\) 一半的方案数。这个东西写出来式子后可以对 \(s\) 递推做到 \(O(n)\)

\(m\) 为偶数时,注意到重心只有可能是一条路径,对路径算贡献可以点分治做到 \(O(n \log^2 n)\),可以通过。

D5T2

操作分块,\(k\) 次冒泡排序。

D5T3

枚举长串 \(s_k\),考虑 \(s_i\) 必然是 \(s_k\) 的某个前缀的最长或次长的有意义后缀。

\(s_k\) 的所有前缀的最长与次长后缀拉出来,可以变为一个区间包含问题,扫描线即可。

D6T1

考虑判定 \((x,y)\) 合法,发现 \(2\) 总是在中间,\(1\)\(3\) 在两侧,可以通过 Hall 定理刻画一个结构,把式子推出来后是一个比较容易计算的东西。

D6T2

凸包,计算几何。

D6T3

注意到最后的逆序操作用处不大。

如果每次只能翻转一个区间,可以分治。

把每层的分治并行操作即可。

D7T1

可以发现选的区间是前缀或后缀,可得答案等于 \(\sum \limits_{i=1}^n \min(\gcd \limits_{j=1}^{i} a_j, \gcd \limits_{j=i+1}^n a_j)\)

显然求出所有本质不同前缀和后缀 \(\gcd\) 即可。复杂度 \(O(n \log n \log V)\)

D7T2

看着不能多项式做,所以考虑爆搜。

发现如果枚举了一个回文子串,即求有多少给定的字符串包含这个回文子串。这个是很经典的建出 KMP 自动机维护 DP。

考虑 KMP 自动机的建立上,事实上只有所有 Border 集合有意义。从大到小搜索 Border 集合并维护字符串两两相同构成的并查集,这样状态数不大可以通过。注意还需要进行一个子集容斥。

D7T3

神秘构造。

D8T1

这个东西看着就很可以调整法。

没有 MST 的限制时,是一个经典问题,将区间按照右端点排序每次取区间内大于等于 \(l\) 的最小权值即可。

有 MST 的限制时,相当于对于每条非树边,要求树上这条路径边权都小于这条边的边权。

对于树上的一条边区间 \([l,r]\) 和这条非树边区间 \([l',r']\),则可以发现可以进行 \(r \gets \min(r',r)\)\(l' \gets \max(l',l)\)

我们声称原问题有解等价于对于每条非树边和树上这条路径上的边这样操作后有解。必要性显然,考虑充分性。对于这样的区间构造答案后,对于每条非树边,考虑求出树上这条路径的最大的边权,若这条非树边比这条树边权值大,就交换这两条边的权值。

可能需要树剖维护一下,复杂度 \(O(n \log^2 n)\),当然精细一点可以做到 \(O(n \log n)\)

posted @ 2025-03-31 18:05  HappyBobb  阅读(125)  评论(0)    收藏  举报