很久没有写过博客了呢。
文章目录
D1T1 - 卡牌游戏
Alice 有 n n n 张卡牌,第 i i i( 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n)张卡牌的正面有数字 a i a_i ai,背面有数字 b i b_i bi,初始时所有卡牌正面朝上。
现在 Alice 可以将不超过 m m m 张卡牌翻面,即由正面朝上改为背面朝上。Alice 的目标是让最终朝上的 n n n 个数字的极差(最大值与最小值的差)尽量小。请你帮 Alice 算一算极差的最小值是多少。
对于数字考虑,极差最小就是对于排序之后的数组中,取一个长度最短的区间。
我们把 a i a_i ai 和 b i b_i bi 都放进去排序,取 n n n 张牌至少出现一次且反面向上的不超过 m m m 张的区间。这很好维护,也不难证明左端点移动时,右端点是单调的,因此用双指针维护即可。
时间复杂度 O ( n ) \mathcal{O}(n) O(n).
D1T2 - 矩阵游戏
Alice 有一个 n × m n \times m n×m 的矩阵 a i , j a_{i, j} ai,j( 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n, 1 ≤ j ≤ m 1 \le j \le m 1≤j≤m),其每个元素为大小不超过 10 6 {10}^6 106 的非负整数。
Bob 根据该矩阵生成了一个 ( n − 1 ) × ( m − 1 ) (n - 1) \times (m - 1) (n−1)×(m−1) 的矩阵 b i , j b_{i, j} bi,j( 1 ≤ i ≤ n − 1 1 \le i \le n - 1 1≤i≤n−1, 1 ≤ j ≤ m − 1 1 \le j \le m - 1 1≤j≤m−1),每个元素的生成公式为
b i , j = a i , j + a i , j + 1 + a i + 1 , j + a i + 1 , j + 1 b_{i, j} = a_{i, j} + a_{i, j + 1} + a_{i + 1, j} + a_{i + 1, j + 1} bi,j=ai,j+ai,j+1+ai+1,j+ai+1,j+1
现在 Alice 忘记了矩阵 a i , j a_{i, j} ai,j,请你根据 Bob 给出的矩阵 b i , j b_{i, j} bi,j 还原出 a i , j a_{i, j} ai,j。
直接高斯消元可以获得一组没有限制的可行解。
首先我们考虑 a i , j a_{i,j} ai,j 范围没有限制的时候怎么做。
那就把第 1 行和第 1 列都定为 0 去递推就好了,反正一定有解,根本不要什么高斯消元。
那么我们就要考虑怎么把这组可行解的值都塞进 [ 0 , 1 0 6 ] [0,10^6] [0,106] 以内。
考虑将矩阵的一行加上 ⟨ − k , k , − k , … , ( − 1 ) j ⋅ k , … , ( − 1 ) m ⋅ k ⟩ \left\langle -k,k,-k,\ldots,(-1)^j\cdot k,\ldots, (-1)^m\cdot k\ \right\rangle ⟨−k,k,−k,…,(−1)j⋅k,…,(−1)m⋅k ⟩,那么显然 b b b 不会发生改变,因为受到影响的四格中必然一格加一格减。列同理。
所以我们可以将元素 a i , j ′ a'_{i,j} ai,j′ 调整为 a i , j = a i , j ′ + ( − 1 ) j ⋅ p i + ( − 1 ) i ⋅ q j a_{i,j}=a'_{i,j}+(-1)^j\cdot p_i+(-1)^i\cdot q_j ai,j=ai,j′+(−1)j⋅pi+(−1)i⋅qj,那么只要 a i , j ∈ [ 0 , 1 0 6 ] a_{i,j}\in[0,10^6] ai,j∈[0,106],即
− a i , j ′ < ( − 1 ) j ⋅ p i + ( − 1 ) i ⋅ q j < 1 0 6 − a i , j ′ -a'_{i,j}<\quad (-1)^j\cdot p_i+(-1)^i\cdot q_j\quad <10^6-a'_{i,j} −ai,j′<(−1)j⋅pi+(−1)i⋅qj<106−ai,j′
考虑解不等式的一边,那么就很显然是一个差分约束问题……好像哪里不对劲。
如果 p i p_i pi 和 q j q_j qj 同号,也就是 i , j i,j i,j 奇偶性相同就没有办法做了。明明长得就是个差分约束的样子,却又不能做。于是做到这我自闭了……
于是就学习了一个新的技巧。
我们令 c i = ( − 1 ) i ⋅ p i , d j = ( − 1 ) j + 1 ⋅ q j c_i=(-1)^i\cdot p_i, d_j=(-1)^{j+1}\cdot q_j ci=(−1)i⋅pi,dj=(−1)j+1⋅qj,则
( − 1 ) j ⋅ p i + ( − 1 ) i ⋅ q j = ( − 1 ) i + j ⋅ c i + ( − 1 ) i + j + 1 ⋅ d j \begin{matrix}(-1)^j\cdot p_i+(-1)^i\cdot q_j&=&(-1)^{i+j}\cdot c_i+(-1)^{i+j+1}\cdot d_j\end{matrix} (−1)

本文是关于2021年联合省选的解题报告,详细介绍了D1T1-D2T3及B卷D1T1-D2T1的题目解析,涉及卡牌游戏、矩阵游戏、图函数等算法问题。文章强调了解题过程中的技巧应用,如差分约束、并查集、最短路等,并提供了代码类的实现细节,包括栈序撤销的可撤销并查集和循环展开等优化技巧。

8331

被折叠的 条评论
为什么被折叠?



