当前位置: 首页 > news >正文

[ARC135D] Add to Square

对网格 \(A\)黑白染色,黑色位置正负取反。这样操作就变为,左上右下加 \(x\),右上左下减 \(x\)


\(sx_i=\sum_{j=1}^m A_{i,j}\)\(sy_j=\sum_{i=1}^n A_{i,j}\)
容易发现,任意行列的和都与 \(A\) 相同的所有矩阵都是可达的。


接下来考虑怎么算出最小的最终矩阵 \(B\)
首先有:答案不小于 \(Sx=\sum_{i=1}^n |sx_i|\),也不小于 \(Sy=\sum_{j=1}^m |sy_j|\)

我们尝试证明答案能取到 \(\max(Sx,Sy)\) 这个下界。
\(sx_i\) 看做需要给行 \(i\) 分配 \(sx_i\) 的总权值,\(sy_j\) 同理。

  • 那么每次如果存在一个 \(sx_i\)\(sy_j\) 同号则在 \(B_{i,j}\) 算上 \(\min(|sx_i|,|sy_j|)\) 的贡献(正负符号取决于 \(sx,sy\))。
  • 如果不存在同号则操作一对 \(sx_{u}>0,sx_{v}<0\) 或一对 \(sy_u>0,sy_u<0\),直至所有 \(sx,sy\) 都为 \(0\)

上述过程可以理解为,操作一对 \(sx_i,sy_j\) 的时候,是给 \(Sx,Sy\) 都减去一个数。而开始操作两行/两列的时候,就等价于 \(Sx,Sy\) 中的一个已经减到 \(0\) 了(因为 \(\sum_{i=1}^n sx_i=\sum_{j=1}^m sy_j\)


点击查看代码
#include <bits/stdc++.h>
#define FL(i, a, b) for (int i = (a); i <= (b); ++i)
#define FR(i, a, b) for (int i = (a); i >= (b); --i)
using namespace std;
typedef long long ll;
const int N = 510;
int n, m;
ll sx[N], sy[N], B[N][N];
bool Work() {int px = 0, nx = 0;int py = 0, ny = 0;FL(i, 1, n) {if (sx[i] > 0) px = i;if (sx[i] < 0) nx = i;}FL(i, 1, m) {if (sy[i] > 0) py = i;if (sy[i] < 0) ny = i;}if (px && py) {ll t = min(sx[px], sy[py]);B[px][py] += t;sx[px] -= t, sy[py] -= t;return 1;}if (nx && ny) {ll t = max(sx[nx], sy[ny]);B[nx][ny] += t;sx[nx] -= t, sy[ny] -= t;return 1;}if (px && nx) {ll t = min(sx[px], -sx[nx]);B[px][1] += t, B[nx][1] -= t;sx[px] -= t, sx[nx] += t;return 1;}if (py && ny) {ll t = min(sy[py], -sy[ny]);B[1][py] += t, B[1][ny] -= t;sy[py] -= t, sy[ny] += t;return 1;}return 0;
}
int main() {scanf("%d %d", &n, &m);FL(i, 1, n) {FL(j, 1, m) {int w;scanf("%d", &w);if ((i + j) & 1)w = -w;sx[i] += w;sy[j] += w;}}ll Sx = 0, Sy = 0;FL(i, 1, n) {Sx += abs(sx[i]);}FL(i, 1, m) {Sy += abs(sy[i]);}while (Work());printf("%lld\n", max(Sx, Sy));FL(i, 1, n) {FL(j, 1, m) {if ((i + j) & 1)B[i][j] = -B[i][j];printf("%lld%c", B[i][j], " \n"[j == m]);}}return 0;
}
http://www.jsqmd.com/news/262470/

相关文章:

  • 2026年出国留学机构排行榜:五家优选全面对比 - 速递信息
  • 5.1 OCR技术进化史:从传统方法到生成式AI突破
  • SAM1gptans
  • 通过mathtype将公式插入word中
  • 2026智能马桶深度评测:希箭马桶,家庭如厕健康新标准 - charlieruizvin
  • 瞧瞧别人家的接口重试,那叫一个优雅!
  • 论文查重前必备的5款AIGC检测工具盘点 - 还在做实验的师兄
  • 完整教程:算法王冠上的明珠——动态规划之路径问题(第一篇)
  • 2026年胶囊充填机优质生产商Top10,天宏机械实力入选 - 工业品牌热点
  • python学习笔记-并发和异步IO
  • 韩秀云老师谈买黄金
  • EtherCAT总线通信学习资料:STM32 MCU AX58100 ESC从站实现方案及一手资源
  • 19.螺旋矩阵
  • python安装教程
  • 付费问答系统的设计与实现毕业论文+PPT(附源代码+演示视频)
  • PostgreSQL实战:一文掌握 pg_hba.conf 配置,涵盖密码认证、IP限制与安全策略
  • 2025年市场上服务好的广告厂家有哪些,户外广告/地铁广告/航空广告/地铁站广告/电梯广告,广告设计找哪家 - 品牌推荐师
  • ACPI!ACPIBuildProcessGenericList函数中2次InterlockedCompareExchange函数作用是标记为WORK_DONE_PENDING下次直接略过
  • 告别查重焦虑!虎贲等考 AI 降重降 AIGC:一次操作双重达标,论文合规不丢质
  • 2026学历提升攻略:口碑学校引领未来方向,国家开放大学招生/自考培训/学历提升/专升本报名,学历提升机构口碑推荐榜 - 品牌推荐师
  • 从Demo到上线:IndexTTS-2-LLM企业级部署步骤详解
  • 2026年市面上有名的河道护坡石笼网公司有哪些,柔韧抗压石笼网/镀锌低碳钢丝石笼网,河道护坡石笼网供应商口碑推荐 - 品牌推荐师
  • 课程论文不用熬大夜!虎贲等考 AI:一键解锁从选题到定稿的高效通关术
  • DeepSeek-R1-Distill-Qwen-1.5B应用实战:智能写作助手开发
  • 塑料管道制造商怎么选,四川都得利管业性价比高吗? - 工业品牌热点
  • 2026年学历提升评测:如何选择口碑好的学校?自考培训/国家开放大学招生/学历提升/专升本报名,学历提升机构推荐 - 品牌推荐师
  • 年终盘点:2025年频谱仪品牌口碑榜,谁主沉浮?光通信测量仪表/通信干扰模拟器/光时域反射仪/电子对抗设备/以太网测试仪频谱仪公司找哪家 - 品牌推荐师
  • 也许是一篇鲜花
  • 2025年本地市场信赖的贯入式砂浆检测仪供应商排行,钢砧/数显砂浆回弹仪/数显高强回弹仪/钢筋锈蚀仪/微型十字板仪检测仪公司推荐排行 - 品牌推荐师
  • 微软出品果然稳!VibeVoice语音合成真实测评