方阵游戏 题解

方阵游戏 题解

这道题的模型转化非常巧妙

通过对操作净次数的讨论,转化成递推式,并通过差分计算答案

题意

  • \(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)\)

相关推荐
lvwangshu2 天前
字符串 题解
字符串·trie·题解·贪心·技巧·性质题·思维好题
lvwangshu3 天前
川剧复演 题解
动态规划·题解·技巧·性质题·思维好题
Tisfy4 天前
LeetCode 2913.子数组不同元素数目的平方和 I:第一题先常数很大的O(n^2)
算法·leetcode·题解·模拟·暴力
Tisfy5 天前
LeetCode 3723.数位平方和的最大值:构造
数学·算法·leetcode·字符串·题解
Tisfy6 天前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
Tisfy6 天前
LeetCode 3727.最大交替平方和:排序 (双指针可选)
算法·leetcode·题解·贪心·数组·排序
Tisfy10 天前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举
王老师青少年编程14 天前
2026年6月GESP真题及题解(C++八级): 选择题和判断题(题解)
c++·题解·真题·gesp·csp·信奥赛·八级
lvwangshu15 天前
CF813D Two Melodies 题解
动态规划·题解·技巧·性质题·思维好题