【c++差分数组】P9583涂色

本文涉及知识点

C++差分数组

P9583涂色

n行m列方格纸,初始是白色(0层)。共涂色q次,每次选择一行或一列,将这行或列涂一层颜色。如果某次涂色后,某个单格是k层颜色,则涂为白色(0层)。求最后被涂色的单格数量。color[i] = {typei,xi},typei为1,给xi行涂色。typei为2,给xi列涂色。xi从1开始。
1 <=m,n <=2e5 1 <= k <= q <=5e5

差分数组

rcnt[i]记录,按行涂i次的行数。i ∈ \in [0,n]。
ccnt[i]记录,按列涂i次的列数。i ∈ \in [0,m]。
计算rcnt的过程
rtmp[i]记录,第i行被涂的次数。i ∈ \in [0,n)。
计算ccnt类似。
每次涂色后,将k层颜色涂成0层。等同于结束后,将k的倍数层颜色涂成0层。故只需要记录 被涂次数%k。

分类讨论

某行按行涂0次,则本行符合条件的单格数:ccnt[1…m]-cnt[k]
令某行被涂 x次,x > 0 则当前行符合单格数:
{ m − c n t [ k − x ] k − x > = 0 m o t h e r \begin{cases} m - cnt[k-x] && k-x >=0 \\ m && other\\ \end{cases} {mcnt[kx]mkx>=0other

代码

核心代码

#include <iostream>
#include <sstream>
#include <vector>
#include<map>
#include<unordered_map>
#include<set>
#include<unordered_set>
#include<string>
#include<algorithm>
#include<functional>
#include<queue>
#include <stack>
#include<iomanip>
#include<numeric>#include <bitset>
using namespace std;class Solution {public:long long Cal(const int R, const int C, const int K, vector<vector<int>>& color) {vector<int> rtmp(R), ctmp(C);for (const auto& v : color) {if (1 == v[0]) {rtmp[v[1] - 1]++;}else {ctmp[v[1] - 1]++;}}auto ToCnt = [&](const vector<int>& tmp) {vector<int> ret(K);for (const auto& n : tmp) {ret[n % K]++;};return ret;};auto rcnt = ToCnt(rtmp);auto ccnt = ToCnt(ctmp);long long ret =0;//按行涂0次for (int i = 0; i < rcnt.size(); i++) {ret += ((long long)C - ccnt[(K - i) % K]) * rcnt[i];}return ret;}};int main() {//freopen("./a.in", "r", stdin);//freopen("./output.txt", "a", stdout);int R,C,Q1,K;scanf("%d%d%d%d", &R, &C, &Q1, &K);vector<vector<int>> color(Q1,vector<int>(2) );	for (int i = 0; i < Q1; i++) {scanf("%d%d", &color[i][0],&color[i][1]);}	auto res = Solution().Cal(R, C, K, color);printf("%lld", res);return 0;
}

单元测试

int R, C, K;vector<vector<int>> color;TEST_METHOD(TestMethod1){R = 2, C = 3, K = 2, color = { {1,1},{1,2},{1,1} };auto res = Solution().Cal(R,C,K,color);AssertEx(3LL, res);}TEST_METHOD(TestMethod2){R = 2, C = 3, K = 2, color = { {1,1},{2,1} };auto res = Solution().Cal(R, C, K, color);AssertEx(3LL, res);}TEST_METHOD(TestMethod3){R = 2, C = 3, K = 2, color = { {2,1},{2,2},{2,3} };auto res = Solution().Cal(R, C, K, color);AssertEx(6LL, res);}TEST_METHOD(TestMethod11){R = 3, C = 4, K = 3, color = { {1, 3}, { 2,4 }, { 1,2 }, { 1,3 }, { 2,2 } };auto res = Solution().Cal(R, C, K, color);AssertEx(8LL, res);} 

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

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

相关文章

【Golang】Gin框架中如何定义路由

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

2024 年最热门的人工智能趋势

文章目录 1. 生成式人工智能&#xff08;Generative AI&#xff09;的全面普及2. 多模态 AI 的崛起3. AI 与自动化的深度融合4. 隐私保护与安全 AI5. AI 驱动的个性化体验6. 低代码与无代码 AI 开发工具7. AI 与边缘计算的结合总结 博主介绍&#xff1a;全网粉丝10w、CSDN合伙人…

vuetify页面布局

效果图&#xff1a; 这个布局用到了以下组件&#xff1a; 1.v-navigation-drawer侧边栏 rail&#xff1a;用来控制侧边栏折叠和展开状态&#xff0c;等于false&#xff0c;是展开状态&#xff0c;否则折叠状态。permanent&#xff1a;等于true的时候&#xff0c;无论屏幕大小…

vue elementui el-table实现增加行,行内编辑修改

需求&#xff1a; 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;可进行行编辑。 效果图&#xff1a; <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…

鼠标移入盒子,盒子跟随鼠标移动

demo效果&#xff1a; 鼠标移入盒子&#xff0c;按下鼠标,开启移动跟随移动模式,再次按下关闭移动模式 涉及主要属性 在元素上单击鼠标按钮时输出鼠标指针的坐标&#xff1a; var x event.pageX; // 获取水平坐标 var y event.pageY; // 获取垂直坐标元素offsetL…

十、pico+Unity交互开发教程——射线抓取与更多交互功能

一、回顾与引入 回顾上一篇直接抓取的教程&#xff0c;VR交互一般需要可交互的对象&#xff08;Interactable&#xff09;和发起交互的对象&#xff08;Interactor&#xff09;。直接抓取和射线抓取的可交互对象无区别&#xff0c;可参考上一篇教程设置组件。两者区别在于发起…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理的高效解决方案

在当今的数字化安防时代&#xff0c;视频监控系统的需求日益复杂和多样化。为了满足不同场景下的监控需求&#xff0c;一种高效、灵活且兼容性强的安防视频监控平台——NVR批量管理软件/平台EasyNVR应运而生。本篇探讨这一融合所带来的创新与发展。 一、NVR监测软件/设备EasyNV…

J.D商品详情,一“网”打尽 —— PHP爬虫API数据获取全攻略

在当今数字化时代&#xff0c;数据已成为最宝贵的资源之一。对于电商平台而言&#xff0c;实时掌握商品的详细信息&#xff0c;如同拥有了解锁市场动态的金钥匙。J.D&#xff0c;作为中国领先的电商平台&#xff0c;其商品详情数据的获取&#xff0c;更是电商领域的一大热点。本…

麒麟V10、UOS系统实现在线合并多个Word文件

不管是将多个Word文件插入到Word模板指定位置&#xff0c;生成一个合并文档&#xff0c;还是将多个Word文档插入到一个空白的Word文件中&#xff0c;首尾连接成一篇文档&#xff0c;都需要用到PageOffice提供的数据区域插入Word文档功能。 在实际项目开发中&#xff0c;以下场景…

【前端】如何制作一个自己的网页(18)定义列表

三、定义列表&#xff08;Definition List&#xff09; 除了有序和无序列表&#xff0c;还有一种HTML列表类型&#xff0c;被称为定义列表。 应用场景&#xff1a;对某个术语或内容进行解释和描述&#xff0c;所以由标题和描述两部分组成&#xff0c;描述是对标题的解释和说明…

docker harbor

文章目录 一&#xff0c;搭建私有仓库1.1下载registry1.2在 daemon.json 中添加私有镜像仓库地址1.3重新加载重启docker1.4运行容器1.5拉取一个centos7镜像1.6给镜像加标签1.7上传镜像1.8显示私有仓库的所有镜像1.8查看私有仓库的 centos 镜像有哪些tag 二&#xff0c;什么是ho…

Linux Redis查询key与移除日常操作

维护老项目Express node 编写的后端程序、有这么一个方法、没有设置redis过期时间&#xff08;建议设置过期时间&#xff0c;毕竟登录生产服务器并不是每个人都有权限登录的&#xff01;&#xff01;&#xff01;&#xff09;。如果变动只能通过登录生产服务器、手动修改… 于…

你还在使用存储过程吗?

上周&#xff0c;reddit 网 r/dotnet 区的网友 technolang 发帖&#xff1a;「你还在使用存储过程吗&#xff1f;」 我很好奇为什么 2024 年了我们还在使用存储过程。难道网络应用中没有一个业务层来处理所有事情吗&#xff1f;依赖 DBA 并在数据库层创建依赖关系似乎没有必要。…

【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff(geogrid,WPS所需数据)

【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff&#xff08;geogrid&#xff0c;WPS所需数据&#xff09; 数据准备&#xff1a;以叶面积指数LAI为例QGis实操&#xff1a;基于GIS4WRF插件将geotiff数据转为tiff警告&#xff1a;GIS4WRF: Input layer had an unexpected …

ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化等更新

ONLYOFFICE 在线编辑器最新版本已经发布&#xff0c;其中包含30多个新功能和500多个错误修复。阅读本文了解所有更新。 关于 ONLYOFFICE 文档 ONLYOFFICE 是一个开源项目&#xff0c;专注于高级和安全的文档处理。坐拥全球超过 1500 万用户&#xff0c;ONLYOFFICE 是在线办公领…

2024年 Spring Boot 系列学习宝典!!!!!

欢迎来到Spring Boot的世界&#xff01;本系列文章旨在为开发者提供从入门到精通的全面指导&#xff0c;无论你是Spring Boot新手还是有经验的开发者&#xff0c;都能在这里找到有价值的内容。让我们一起踏上这段旅程&#xff0c;探索如何使用Spring Boot构建高效、可扩展的应用…

Redis底层和缓存雪崩,击穿,穿透

一、Redis的数据结构 1.动态字符串 我们知道Redis中保存的Key是字符串&#xff0c;value往往hi字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。不过&#xff0c;Redis 没有直接使用c语言的字符串&#xff0c;因为c语言字符串存在许多问题&#xff1a; …

蚁剑连接本地木马文件报错

项目场景&#xff1a; 本地搭建php和蚁剑环境&#xff0c;连接本地木马文件ma.php 问题描述 使用蚁剑连接localhost时报错 错误{ "address":"127.0.0.1" "code":"ECONNREFUSED", "errno":"ECONNREFUSED", &qu…

【Kubernetes实战】Kubernetes集群搭建(虚拟机环境,一主两从)

目录 一、 以Node1节点为例创建虚拟机二、 环境初始化三、集群所需组件安装1. docker&#xff08;18.06.3&#xff09;2. 安装Kubernetes组件 四、安装Kubernetes集群1. 准备集群镜像2. 集群初始化3. 安装网络插件 五、环境测试(服务部署) 集群规模&#xff1a;一主二从(一个ma…

云计算实验1——基于VirtualBox的Ubuntu安装和配置

实验步骤 1、VirtualBox的安装 本实验使用VirtualBox-7.0.10 进行演示。对于安装包&#xff0c;大家可以前往 VirtualBox官网下载页面(https :/ / www. virtualbox.org/wiki/Downloads)下载其7.0版本安装包进行安装&#xff0c;或者直接使用QQ群的安装包VirtualBox-7.0.10-15…