Matrix Subtraction

题意:

一个给定的矩阵,然后给定一个子矩阵的大小,子矩阵可以 将覆盖矩阵的区域的值减1,问能否将矩阵全部减为0

题解:

思路和下面这个链接讲的题十分相似
传送
本质就是二维树状数组差分求解
用mp数组来存矩阵,然后对空白的data数组进行构造,构造完对mp进行清理,最后要看data能否构造出mp的样子,也就是看mp是否全为0
从左上角到右下角的顺序开始处理

代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
typedef long long ll;
ll mp[1005][1005];
int m,n,a,b;
int t;const int MAX = 1123;
ll data[MAX][MAX];int lowbit(int x) {return x&-x;
}void Add(int x, int y, ll w) {for (int i = x; i <= n; i += lowbit(i)) {for (int j = y; j <= m; j += lowbit(j)) {data[i][j] -= w;}}
}void Add2(int x, int y, ll w) {for (int i = x; i <= n; i += lowbit(i)) {for (int j = y; j <= m; j += lowbit(j)) {data[i][j] += w;}}
}ll Sum(int x, int y) {ll ans = 0;for (int i = x; i > 0; i -= lowbit(i)) {for (int j = y; j > 0; j -= lowbit(j)) {ans += data[i][j];}}return ans;
}int g(){for(int i=1;i+a-1<=n;i++){for(int j=1;j+b-1<=m;j++){ll num=Sum(i,j);num=mp[i][j]-num;mp[i][j]=num;if(mp[i][j]>0){int x1, x2, y1, y2;x1=i;x2=i+a-1;y1=j;y2=j+b-1;Add2(x1, y1, mp[i][j]);Add(x2+1, y1, mp[i][j]);Add(x1, y2+1, mp[i][j]);Add2(x2+1, y2+1, mp[i][j]);mp[i][j]=0;}else if(mp[i][j]<0){return 1;}}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(i>n-a+1||j>m-b+1)mp[i][j]-=Sum(i,j);if(mp[i][j]!=0){return 1;}}}return 0;
}int main(){scanf("%d",&t);while(t--){scanf("%d%d%d%d",&n,&m,&a,&b);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%lld",&mp[i][j]);}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){data[i][j]=0;}}int sign=g();if(sign==0){printf("^_^\n");}else{printf("QAQ\n");}}return 0;
}

Matrix Subtraction(小米icpc邀请赛第一场)相关推荐

  1. 2020ICPC·小米 网络选拔赛第一场 J.Matrix Subtraction

    2020ICPC 小米 网络选拔赛第一场 J.Matrix Subtraction 题目链接 题目描述 Given a matrix MM_{}M​ of size n×mn\times mn×m a ...

  2. 2020ICPC·小米 网络选拔赛第一场 D.Router Mesh

    2020ICPC·小米 网络选拔赛第一场 D.Router Mesh 题目链接 题目描述 In a Mesh networking system, there are nn_{}n​ MI Route ...

  3. 2020ICPC·小米 网络选拔赛第一场(Matrix Subtraction (二维差分))

    题目传送门 Matrix Subtraction 题目大意 给你一个 n × m n×m n×m的矩阵,每次可从矩阵中选择一个大小为 a × b a×b a×b的矩阵,使得该子矩阵的值全部减一 求最后 ...

  4. 2020ICPC·小米 网络选拔赛第一场

    比赛链接 前言 第二场都快打了才补完题目发博客,最近事情真的太多了= = A - Intelligent Warehouse(DP+数论优化),三种做法 题目大意 给出 n n n个数,从中选择最多的 ...

  5. 2020ICPC·小米 网络选拔赛第一场 全部题解

    整理的算法模板合集: ACM模板 目录 题目传送门 题目总体情况 A.Intelligent Warehouse B.Intelligent Robot C.Smart Browser D.Route ...

  6. ICPC2020小米网络选拔赛第一场复盘

    1.看题 第一次组队打ICPC,可能任务分配上还有待优化 但是有个团队,感觉安心好多. 我们有三个人,开始是分开来,每人看三题 djn看ABC,jyf看DEF,我看GHI,JK没人看 我开始只来得及看 ...

  7. acm-(推式子、好题、数学、排列计数)2020ICPC·小米 网络选拔赛第一场 H.Grouping

    传送门 先将aia_iai​从小到大排序. 然后这里有一些符号约定: ggg表示一个分组, wg=∣ai−aj∣w_g=|a_i-a_j|wg​=∣ai​−aj​∣表示某个组ggg的权值, GGG表示 ...

  8. 2020ICPC·小米 网络选拔赛第一场(D. Router Mesh)

    题意: 模板题,求图中每个割点能把网络分成几个点双连通分量(不是割点就输出他有几块即可). 题解: 跟POJ 的SPF很像 这题用Tarjan来求,首先我们需要统计出来具体有几个连通块. 对于每个连通 ...

  9. 2020ICPC·小米 网络选拔赛第一场 Intelligent Warehouse(DP)

    题意: n个数,要求取得最多的数,使得任意两个数其中一个为另一个倍数. 思路: 则定义dp[i]dp[i]dp[i]为第i个数为取出序列数中最大数时,最多取多少数. 则dp[i]dp[i]dp[i]向 ...

最新文章

  1. 64位Ubuntu上编译32位程序操作步骤
  2. 3D鸟类重建—数据集、模型以及从单视图恢复形状
  3. DLL的编写与使用(C++)
  4. fcntl函数-文件控制函数
  5. linux下telnet失败怎么处理,CentOS下telnet退出失败的解决办法
  6. 电脑睡眠快捷键_电脑快速进入睡眠的快捷键是什么?
  7. file 选择的文件胖多有多大_如何删除 macOS 压缩包中的隐藏文件?
  8. mysql 查询一个月的时间_mysql日期查询sql语句总结(查询一天,查询一周,查询一个月的数据)...
  9. 作者:张宇中(1969-),男,中国电信股份有限公司云计算分公司首席数据分析师、大数据分析顾问。...
  10. hibernate entity使用sequence方式时,id增量50且与sequence值不一致的问题
  11. 《Cortex-M0权威指南》之体系结构---嵌套中断控制器(NVIC)
  12. learning scala 变量
  13. 无人自助便利店采用射频识别技术 30秒钟就能完成付款
  14. mysql5.6 table cache_MySQL 5.6下table_open_cache参数优化合理配置详解
  15. C语言 5个数最值问题
  16. 接支付宝支付的那些坑
  17. 【学习笔记】程序员学操作系统
  18. 计算机408专业考研真题,2021年计算机考研408历年真题及答案
  19. 将MATLAB任务栏变成白色的图标恢复
  20. canvas将彩色图片变为灰度图片理解问题

热门文章

  1. oracle 大页配置,【Oracle】Oracle如何开启大页
  2. python qt信号在qml 的使用_QML与Python通信
  3. java 按钮设置图片_Java中如何设置带图片按钮的大小
  4. cefsharp49显示html,CefSharp-cefshar
  5. java中的console是干什么的_[Java教程]javascript中,你真的会用console吗?
  6. 你可能对position和z-index有一些误解
  7. [JS-BOM]BOM_Location地址栏对象
  8. C++ class实现双亲表示法
  9. 《C++ Primer》13.1.1节练习
  10. [蓝桥杯2015决赛]五星填数-枚举+数论