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

[省选联考 2021 A 卷] 矩阵游戏

比较有意思的一道题。

首先不考虑 \(a_{i, j}\) 的限制随便求,然后开始调整。你发现对于每行,奇数列 \(+x\) 偶数列 \(-x\) 不会变,列也同理,假设第 \(i\) 行的 \(x\)\(r_i\), 第 \(j\) 列的 \(x\)\(c_j\)。然后考虑对 \(a\) 加上一个矩阵 \(A\)\(A_{i, j} = (-1)^{2\mid i+1}r_i - (-1)^{2\mid j+1}c_j\)。然后你发现这样会有加和,不能跑差分约束,调整一下,\(\forall 2 \mid i, r_i \leftarrow -r_i, \forall 2 \nmid j, c_j \leftarrow -c_j\),就都是差的形式了。然后差分约束即可,时间复杂度 \(\mathcal{O}(nm(n+m))\)

点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
// typedef __int128 i128;
typedef pair<int, int> pii;
const int N = 3e2 + 10, V = 1e6, mod = 998244353;
template<typename T>
void dbg(const T &t) { cout << t << endl; }
template<typename Type, typename... Types>
void dbg(const Type& arg, const Types&... args) {cout << arg << ' ';dbg(args...);
}
namespace Loop1st {
int n, m, b[N][N], a[N][N];
ll dis[N << 1];
vector<pii>e[N << 1];
void main() {memset(dis, 0x3f, sizeof dis); memset(a, 0, sizeof a);cin >> n >> m;for (int i = 0; i <= n + m; i++) e[i].clear();for (int i = 1; i <= n + m; i++) e[0].push_back({i, 0});for (int i = 1; i < n; i++) for (int j = 1; j < m; j++) cin >> b[i][j];for (int i = n - 1; i; i--) {for (int j = m - 1; j; j--) {a[i][j] = b[i][j] - a[i + 1][j] - a[i][j + 1] - a[i + 1][j + 1];}}for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) {if ((i + j) & 1) e[n + j].push_back({i, a[i][j]}), e[i].push_back({n + j, V - a[i][j]});else e[i].push_back({n + j, a[i][j]}), e[n + j].push_back({i, V - a[i][j]});}dis[0] = 0;int t = 1;for (t = 1; t <= n + m + 2; t++) {bool ok = 0;for (int u = 0; u <= n + m; u++) {for (auto [v, w] : e[u]) if (dis[v] > dis[u] + w) {dis[v] = dis[u] + w;ok = 1;}}if (!ok) break;}if (t > n + m + 2) {cout << "NO\n";return ;}cout << "YES\n";for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {// dbg("###", i, j, dis[i], dis[n + j], a[i][j]);if ((i + j) & 1) cout << a[i][j] + dis[n + j] - dis[i] << " \n"[j == m];else cout << a[i][j] + dis[i] - dis[n + j] << " \n"[j == m];}}
}}
int main() {// freopen("data.in", "r", stdin);// freopen("data.out", "w", stdout);ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int T = 1;cin >> T;while (T--) Loop1st::main();return 0;
}
http://www.jsqmd.com/news/145033/

相关文章:

  • 深入解析:《学习JavaScript数据结构与算法》核心知识点梳理
  • 如何复现论文中的大模型方法并解决实际问题
  • 基于微信小程序的维修服务平台的设计与实现
  • 腾讯游戏开局第一课课程笔记
  • 以茶叶取小名,萌到想贴贴[特殊字符]
  • springboot城镇保障性住房管理系统(11594)
  • 记录一下自己不会的单词,我一定会整明白你们的
  • cs50-linked list笔记
  • Claude-Mem:编程时的持久记忆压缩系统
  • springboot基于java的教学辅助平台(11595)
  • OpenAI 格式 API 通用接入说明(含 Cherry Studio 配置教程)
  • 7款免费AI写论文工具实测:知网维普查重一把过,不留AIGC痕迹! - 麟书学长
  • 大数据领域Kappa架构:全面解析与应用场景
  • Post-training with Tinker:定制语言模型的最佳解决方案
  • 告别“卡顿”与“依赖”,国产数据库文档兼容版:国产化替代的性能王者来了!
  • java计算机毕业设计校园车辆门禁管理系统 高校智能车行闸机云平台的设计与实现 基于SpringBoot的校园车辆出入与收费一体化系统
  • 百亿量化私募高薪急招C++,应届,社招都看春招/秋招/校招/社招,23/24/25/26届都可base北上杭深现招岗位:C++量化系统开发工程师年base40-80万+bonus通
  • 基于SpringBoot的房屋交易平台的设计与实现毕业论文+PPT(附源代码+演示视频)
  • 操作系统核心考点与解题模板全解析
  • 第三章 遗传物质的分子基础
  • 2025 四款 AI 平台推荐,谁最高效
  • 第四章 孟德尔遗传
  • 第九章 基因工程和基因组学
  • 2026游戏圈首战打响!谁能成为开年第一个爆款?
  • 第五章 连锁遗传和性连锁
  • 基于Spring Boot技术的卓越导师双选系统(11591)
  • 软件测试面试常见问题及答案
  • Ty讲解,新手c语言速成教学1
  • 第六章 染色体变异
  • 数显6000V漏电起痕试验仪