codeforces 955 div 2 D

news/2024/11/18 19:36:17/文章来源:https://www.cnblogs.com/xrenenena/p/18292468

题目链接 D. Beauty of the mountains

题目大意



解题思路

首先记录所有雪山和没有雪山两种山峰的高度差为 \(tot\) ,然后对于每个可能的子矩,我们可以每次给所有山峰都加一或者减一,因此只要计算出矩阵内两种山峰的个数差的绝对值我们就能得到每次操作该子矩阵对tot的贡献 \(z_{i}\) ,因此我们只需要判断这些子矩阵的贡献值通过加减能否等于 \(tot\) 即可。

故原命题转化为求下面这个式子是否存在整数解, 即 \(d_{i}\) 全为整数,其中 \(d_{i}\) 是每个子矩阵的操作次数,

\[z_{1} \cdot d_{1} + z_{2} \cdot d_{2} + \dots + z_{q} \cdot d_{q} = tot \]

对于子矩阵的贡献采用二维前缀和即可求出
对于上面式子整数解的存在性问题只需要验证

\[tot \bmod gcd(z_{1}, z_{2}, \dots, z_{q}) = 0 \]

代码

#include <bits/stdc++.h>#define debug cout << "debug" << endl;
#define debug1(a) cout << #a << " = " << a << endl;
#define debug2(a, b) \cout << #a << " = " << a << "  " << #b << " = " << b << endl;
#define debug3(a, b, c)                                                         \cout << #a << " = " << a << "  " << #b << " = " << b << "  " << #c << " = " \<< c << endl;
#define debug4(a, b, c, d)                                                      \cout << #a << " = " << a << "  " << #b << " = " << b << "  " << #c << " = " \<< c << "  " << #d << " = " << d << endl;
#define debug5(a, b, c, d, e)                                                   \cout << #a << " = " << a << "  " << #b << " = " << b << "  " << #c << " = " \<< c << "  " << #d << " = " << d << "  " << #e << " = " << e << endl;
#define caseT \int T;    \cin >> T; \while (T--)// #define M(x, y) make_pair(x, y)
// #define M(x, y, z) make_tuple(x, y, z)
// #define int long long
// #define int __int128
using namespace std;
// using str = string;
using ull = unsigned long long;
using ll = long long;
// using pii = pair<int, int>;
// using tiii = tuple<int, int, int>;
const int N = 5e2 + 10;void solve() {int n, m, k;cin >> n >> m >> k;vector<vector<int>> g(n+1, vector<int>(m+1)), sa(n+1, vector<int>(m+1)), sb(n+1, vector<int>(m+1));vector<int> z;ll tot = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> g[i][j];}}//计算二维前缀和for (int i = 0; i < n; i++) {string s;cin >> s;for (int j = 0; j < (int)s.size(); j++) {sa[i + 1][j + 1] = sa[i + 1][j] + sa[i][j + 1] - sa[i][j];sb[i + 1][j + 1] = sb[i + 1][j] + sb[i][j + 1] - sb[i][j];if (s[j] == '0') {sa[i + 1][j + 1] += 1;tot += g[i + 1][j + 1];} else {sb[i + 1][j + 1] += 1;tot -= g[i + 1][j + 1];}}}tot = abs(tot);// 计算子矩阵的贡献存起来for (int i = k; i <= n; i++) {for (int j = k; j <= m; j++) {int numa = sa[i][j] - sa[i][j - k] - sa[i - k][j] + sa[i - k][j - k];int numb = sb[i][j] - sb[i][j - k] - sb[i - k][j] + sb[i - k][j - k];int num = abs(numa - numb);if (num) {z.emplace_back(num);}}}// 求解所有z的最大公因数int gc = 0;for (int i = 0; i < (int)z.size(); i++) {gc = __gcd(gc, z[i]);}// 特判tot==0,和gc==0if (tot == 0) {cout << "YES" << "\n";} else if (gc != 0 && tot % gc == 0) {cout << "YES" << "\n";} else {cout << "NO" << "\n";}return;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);caseT solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/741251.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全局ID工具类

测试方法学习: 定义一个任务(生成id),执行300次,让不同线程执行这300次,用线程池对象的submit方法。心甘情愿做你现在想做的每一件事。

Dubbo源码学习

学习Dubbo框架与手写模拟相关内容 一、存在的意义 Dubbo:解决分布式系统的复杂性,实现服务治理(使服务之间的调用变的简单)和自动注册与发现,简化服务调用。 二、调用过程Dubbo的使用 接口代表一种服务,对应不同的实现,使服务之间的依赖变的简单。 服务消费者通过ClassP…

软件测试的分类and测试进阶路线

本文来自博客园,作者:子沐呐吖,转载请注明原文链接:https://www.cnblogs.com/SuperLee017/p/18292404

使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例

介绍 WordPress是一款免费开源的网站内容管理系统(CMS),它可以帮助用户简单快捷地创建和管理自己的网站,包括博客、新闻网站、电子商务网站、社交网络等等。WordPress 有丰富的主题和插件库,使得用户可以轻松地为网站定制外观和功能。WordPress 的易用性和可扩展性使其成为…

[Java SE] Java-文件系统-常用文件路径的获取方法

1 获取相对路径 /*** 获取相对路径 【推荐】* 使用Java提供的Path类和Paths类来获取相对路径。* 例如,假设有两个路径a和b,我们可以使用Path类的relativize()方法来获取相对路径,该方法返回一个相对路径的Path对象。*/ @Test public void getRelativePathTest1(){Path pathA…

CH582 CH592 CH573 BLE central主机获取handle值

GATT_DiscCharsByUUID和GATT_ReadUsingCharUUID 差异

[深入理解Java虚拟机]Java内存模型

Java内存模型 概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多场景下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络…

深入理解 DB-GPT

DB-GPT 项目介绍 DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Mult…

2024年国内最经典好用的5款项目管理软件工具助你一路长虹

目前市场上的项目管理软件众多,但是它们也都有一些共同的功能及特点。比如任务和进度管理、资源分配、财务监控、风险评估、协作增强以及报告和洞察力等。这些功能不仅提供了强大的工具来确保项目的高效执行和按时交付,而且还为团队成员和管理者提供了实时的数据和信息,帮助…

「代码随想录算法训练营」第六天 | 哈希表 part2

454. 四数相加 II题目链接:https://leetcode.cn/problems/4sum-ii/ 题目难度:中等 文章讲解:https://programmercarl.com/0454.四数相加II.html 视频讲解: https://www.bilibili.com/video/BV1Md4y1Q7Yh 题目状态:没思路思路:创建一个unordered_map<int, int>类型的…

C#和VB.NET连接Access

一、直接通过软件连接Access表 1:新建一个windowsForm工程。2:打开"检视\伺服器总管\资料连接"后,右击"资料连接"后打开"连接资料连接",选择正确的资料来源与资料库档名,若有密码请输入正确的密码,如无,则不输入。3:点击"测试连接&qu…