方阵游戏 题解
方阵游戏 题解
这道题的模型转化非常巧妙
通过对操作净次数的讨论,转化成递推式,并通过差分计算答案
题意
- \(n \times n\) 方阵,初始仅 \(m\) 个非零格;每次操作选一个 \(k \times k\) 连续子方阵,整体 \(+1\) 或 \(-1\)。
- 求最少操作次数使全矩阵变 \(0\),无解输出 \(-1\)。
核心转化:操作净次数
设 \(x_{i,j}\) 为以 \((i,j)\) 为左上角的 \(k \times k\) 操作的净值(\(+1\) 次数减 \(-1\) 次数,可正可负可为 \(0\))。合法左上角:\(1 \le i, j \le n-k+1\)
显然:
-
代价:同位置的正负操作互相抵消,净值为 \(x\) 时最少恰好 \(|x|\) 次,故
\(\text{ans} = \sum_{i,j} |x_{i,j}|\) -
约束:格子 \((i,j)\) 被左上角位于 \([i-k+1,i] \times [j-k+1,j]\) 内的操作覆盖
-
即
\(a_{i,j} + \sum_{p=i-k+1}^{i} \sum_{q=j-k+1}^{j} x_{p,q} = 0\)
解是唯一的
扫描到 \((i,j)\) 时:能影响它的操作的左上角满足 \(p \le i,\ q \le j\);其中扫描顺序在 \((i,j)\) 之前的都已被定死,未确定的只剩 \(x_{i,j}\) 本身。
因此 \(x_{i,j}\) 被迫恰好抵消 \((i,j)\) 的当前残值,没有任何自由度:
- 整个方程组只有唯一候选解;
- 候选解合法 \(\Rightarrow\) 它就是答案(无需比较优劣);
- 不合法 \(\Rightarrow\) 输出 \(-1\)。
前缀和优化
设 \(S_{i,j} = \sum_{p \le i,\ q \le j} x_{p,q}\)。
\(\sum_{\text{win}} x = S_{i,j} - S_{i-k,j} - S_{i,j-k} + S_{i-k,j-k}\)
代入约束 \(a_{i,j} + \sum_{\text{win}} x = 0\),移项得 O(1) 递推:
\(S_{i,j} = -a_{i,j} + S_{i-k,j} + S_{i,j-k} - S_{i-k,j-k}\)
差分还原 & 合法性检查
递推完成后用差分还原:
\(x_{i,j} = S_{i,j} - S_{i-1,j} - S_{i,j-1} + S_{i-1,j-1}\)
逐格分类:
- 若 \((i,j)\) 在合法区(\(i,j \le n-k+1\)):\(ans += abs(x)\);
- 否则:若 \(x_{i,j} \ne 0\),判无解输出 \(-1\)。
由递推唯一性,该检查必要且充分。
复杂度
\(O(n^2 + m)\)
原创·转载请注明出处
✦
浙公网安备 33010602011771号