【补题】AT I

ARC135

D - Add to Square \(\star\)

令初始矩阵为 \(a\),答案矩阵为 \(b\),那么 \(b\) 合法的充要条件是

  • \(\forall i,\sum_{j=1}^{m}(-1)^{i+j}a_{i,j}=\sum_{j=1}^{m}(-1)^{i+j}b_{i,j}\)
  • \(\forall j,\sum_{i=1}^{n}(-1)^{i+j}a_{i,j}=\sum_{i=1}^{n}(-1)^{i+j}b_{i,j}\)

必要性:每次操作都不会改变等号右边的值
充分性:不断操作使得 \(a_{i,j}=b_{i,j}(i<n,j<m)\),由上式可得其余的位置也对应相等

要求 \(\sum|b_{i,j}|\) 最小,因此可以给 \(a_{i,j},b_{i,j}\) 都乘上 \((-1)^{i+j}\) 而不影响答案。问题转化为给定 \(x_{i}=\sum_{j}a_{i,j},y_{j}=\sum_{i}a_{i,j}\),构造最小的 \(\sum|b_{i,j}|\) 使得 \(x_{i}=\sum_{j}b_{i,j},y_{j}=\sum_{i}b_{i,j}\)。进一步的,可以看作以 \(c\) 的代价使 \(x_{i}-c,y_{j}-c\),求把 \(x_{i},y_{j}\) 变成 \(0\) 的最小代价(对 \(b\) 同步操作即可构造方案)

显然最小代价 \(\ge\max(\sum_{i}|x_{i}|,\sum_{j}|y_{j}|)\),存在达到下界的构造
这个过程中始终有 \(\sum_{i}x_{i}=\sum_{j}y_{j}\),因此最终一定能都变成 \(0\)
前两种情况显然以 \(c\) 的代价把 \(\max(\sum_{i}|x_{i}|,\sum_{j}|y_{j}|)-c\);情况三出现时一定有 \(\forall j,y_{j}=0\),以 \(c\) 的代价把 \(\sum_{i}|x_{i}|-c\);情况四同理

ARC133

C - Row Column Sums

赛时:思路贴近正解,但仍欠缺思考

显然 \(\sum a_{i}\not\equiv\sum b_{i}\) 无解,否则有解

贪心地考虑,先将每个位置都填 \(k-1\),然后统计每行/列需要减多少使其合法,分别记为 \(c_{i},d_{i}\),那么总和至少需要减 \(\max(\sum c_{i},\sum d_{i})\),事实上存在只减少这么多的方案:

由于 \(\sum c_{i}\equiv\sum d_{i}\),那么让 \(c_1\)\(d_1\) 加上若干倍 \(k\) 可以使 \(\sum c_{i}=\sum d_{i}\),然后每次选出 \(c_{i}>0,d_{j}>0\)\((i,j)\)\(1\),重复 \(\max(\sum c_{i},\sum d_{i})\) 就得到了合法方案

D - Range XOR

首先要知道

\[s_{n}=\oplus_{i=0}^{n}=\left\{\begin{matrix} 4n & (n\equiv 0\mod4)\\ 1 & (n\equiv 1\mod4)\\ 4n+3 & (n\equiv 2\mod4)\\ 0 & (n\equiv 3\mod4) \end{matrix}\right.\]

然后试图改题失败了/kk

upd 2.10

贺了份代码,改过了

相当于统计 \(L-1\le l<r\le R,s_{l}\oplus s_{r}=V\),容斥成 \(l\le n,r\le m\) 的形式,然后分类讨论,需要数位 DP 一下

代码还是比较有技巧的,想清楚细节,注意 \(L^{2}\) 会爆 LL,需要先模后乘

ABC234

G - Divide a Sequence

赛时:想出正解,未能实现

\(f[i]\) 为前 \(i\) 个元素的权值和,则有 \(f[i]=\sum_{j=1}^{i}f[j-1](\max_{k=j}^{i}\{A_{k}\}-\min_{k=j}^{i}\{A_{k}\})\),可以将 \(\max\)\(\min\) 分别求和

后缀 \(\max\) 相同的一段可以合并计算,且从 \(i-1\) 变到 \(i\) 时改变的一定是一段后缀,可以用单调栈维护,记录 \(\max\)\(\sum f\),再用变量记录栈内的 \(\sum\max\times f\),进出栈时更新即可

code

Ex - Enumerate Pairs

赛时:KDT 通过。(赛后发现了 200ms KDT,令我大为震惊)

以下是官方题解做法

把每个点 \((x,y)\) 分配到 \(\text{Packet}(\lfloor\frac{x}{k}\rfloor,\lfloor\frac{y}{k}\rfloor)\),显然与 \(\text{Packet}(x,y)\) 中点构成合法点对的点,一定在其周围 \(8\)\(\text{Packet}\) 中,暴力即可,时间复杂度 \(O(n+m)\)

证明:

\(f(n)\) 为一个大小为 \(n\)\(\text{Packet}\),至少有多少个合法点对满足其两点均在该 \(\text{Packet}\) 中。将一个 \(\text{Packet}\) 分为 \(4\)\(\frac{k}{\sqrt{2}}\times\frac{k}{\sqrt{2}}\) 的正方形,则一个正方形内的任两点都是合法点对,且至少有一个正方形内点数 \(\ge\frac{n}{4}\),因此 \(f(n)=\Omega(n^{2})\)

\(\sum_{x,y}f(|\text{Packet}(x,y)|)\le M\) 可得 \(\sum_{x,y}|\text{Packet}(x,y)|^{2}=O(n+m)\)。算法中我们枚举的点对数为 \(\sum_{x,y}\sum_{d_{1}=0}^{1}\sum_{d_{2}=0}^{1}|\text{Packet}(x,y)||\text{Packet}(x+d_{1},y+d_{2})|\),且有 \(ab\le\frac{a^{2}+b^{2}}{2}\),因此也为 \(O(n+m)\)

另有人类的智慧做法,随机化后快速估计一下复杂度的思想很值得借鉴

posted @ 2022-01-09 19:56  401rk8  阅读(128)  评论(0编辑  收藏  举报