前言:
点此返回 GJ Round 目录
博客园可能食用更佳
Round 22 (11.4)
唯一一次快速补完了题
A
AT_arc077_a [ABC066C] pushpush
不懂这原题标号咋这么奇怪
给你一个序列 a 1 … a n a_1 \dots a_n a1…an,按照如下规则构造新序列:
- 将 a i a_i ai 插入序列末尾
- 将整个序列反转
模拟 / 打表找规律:
- 当 n n n 为奇数时,答案为 a n a n − 2 … a 3 a 1 a 2 a 4 … a n − 3 a n − 1 a_n a_{n-2} \dots a_3 a_1 a_2 a_4 \dots a_{n-3} a_{n-1} anan−2…a3a1a2a4…an−3an−1
- 当 n n n 为偶数时,答案为 a n a n − 2 … a 4 a 2 a 1 a 3 … a n − 3 a n − 1 a_n a_{n-2} \dots a_4 a_2 a_1 a_3 \dots a_{n-3} a_{n-1} anan−2…a4a2a1a3…an−3an−1
时间复杂度 O ( n ) \mathcal O(n) O(n)
B
初始给定 n n n 个点 ( x i , y i ) (x_i,y_i) (xi,yi),给两个点 i , j ( i ≠ j ) i,j (i \neq j) i,j(i=j) 连边的代价为 ∣ x i − x j ∣ 3 + ∣ y i − y j ∣ 3 |x_i-x_j|^3+|y_i-y_j|^3 ∣xi−xj∣3+∣yi−yj∣3, q q q 次询问,每次加入一条新边,求每次将所有点连通所花费的最小代价
对原图跑 prim 求最小生成树,保留 n − 1 n-1 n−1 条边,再与新加入的 q q q 条边跑 q q q 次 kruskal,时间复杂度为 O ( n 2 + q m log n + m log m ) \mathcal O(n^2 + q m \log n + m \log m) O(n2+qmlogn+mlogm),其中 m = n − 1 + q , log n m=n-1+q,\log n m=n−1+q,logn 为并查集的时间复杂度,若是并查集继续使用了启发式合并 / 按秩合并可以优化至 O ( n 2 + q m α ( n ) + m log m ) \mathcal O(n^2 + q m \alpha(n) + m \log m) O(n2+qmα(n)+mlogm),其中, α ( n ) \alpha(n) α(n) 为反阿克曼函数
实则还可以不跑 q 次 kruskal,直接 dfs 找环删除环上最大边边即可,时间复杂度为 O ( n 2 + q n ) \mathcal O(n^2 + q n) O(n2+qn)
C
给你两个长度为 n n n 的序列 a , b a,b a,b,保证 ∀ i , j ∈ [ 1 , n ] ∩ Z , i ≠ j \forall i,j \in [1,n] \cap \mathbb Z,i \neq j ∀i,j∈[1,n]∩Z,i=j,都有 a i ≠ a j , b i ≠ b j a_i \neq a_j,b_i \neq b_j ai=aj,bi=bj,定义他们的距离为 ∑ i = 1 n ( a i − b i ) 2 \sum_{i=1}^{n} (a_i-b_i)^2 ∑i=1n(ai−bi)2,求距离的最小值,答案对 998244353 998244353 998244353 取模,并求出最小化距离时所需要交换的次数
对于问题一,显然将 a a a 序列中的第 k k k 大与 b b b 序列中的第 k k k 大排在一起即可,易证
第二问直接 for
模拟一下每个数是否已到对应位置,总时间复杂度为 O ( n log n ) \mathcal O(n \log n) O(nlogn)
D
魔法阵是一个任意大小的方阵,满足如下性质:
- 设 ( i , j ) (i,j) (i,j) 有 a i , j a_{i,j} ai,j 个魔法石,则有 a i , j ≥ m a_{i,j} \geq m ai,j≥m
- 设魔法阵大小为 k k k,任意从魔法阵中选出 k k k 个格子,满足任意两个格子不在同一行也不在同一列,那么选出的 k k k 个格子的石子数之和是相同的
- 魔法阵中对角线石子数之和不能超过 n n n
多测,给定 n , m n,m n,m,求方案数,答案对 998244353 998244353 998244353 取模
容易发现, a i , j = x i + y j a_{i,j}=x_i+y_j ai,j=xi+yj 是一个合法的方阵
钦定 min ( x i ) = 0 \min(x_i)=0 min(xi)=0,则方阵与数列之间一一对应,此时 a i j ≥ m a_{i_j} \geq m aij≥m 等价于 min ( y i ) ≥ m \min(y_i) \geq m min(yi)≥m
不妨将所有的 y i y_i yi 减去 m m m,使得问题转化成至多 ( n − k m ) (n-km) (n−km) 个石子放入 2 k 2k 2k 个格子,且前 k k k 个格子至少有 1 1 1 个没有的方案数,容斥后得:
a n s = ( n − k m + 2 k 2 k ) − ( n − k m + k 2 k ) ans= {n - km + 2k\choose 2k} - {n - km + k \choose 2 k} ans=(2kn−km+2k)−(2kn−km+k)
询问时间复杂度为 O ( ∑ ⌊ n m ⌋ ) \mathcal O(\sum \lfloor \frac{n}{m} \rfloor) O(∑⌊mn⌋),然后预处理逆元的复杂度只需要 O ( V ) \mathcal O(V) O(V) 即可,其中 V V V 为值域大小