文章目录

‹
›

方阵游戏 题解

方阵游戏 题解

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

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

题意

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

posted @ 2026-10-20 19:58  lvwangshu  阅读(19)  评论(0)    收藏  举报