P8783 [蓝桥杯 2022 省 B] 统计子矩阵

题目:P8783 [蓝桥杯 2022 省 B] 统计子矩阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码:(部分解析在代码中)

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
long long a[1010][1010];
long long pre[1010][1010];
long long ptr(int x1,int y1,int x2,int y2)
{
	return pre[x2][y2]-pre[x2][y1-1]-pre[x1-1][y2]+pre[x1-1][y1-1];
}
int main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int n,m;
	long long k;
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j];
		} 
	}
	long long ans=0;
	//i记录左上角的横坐标 
	for(int i=1;i<=n;i++)
	{
		for(int j=i;j<=n;j++)//j记录右下角的横坐标 
		{
			for(int l=1,r=1;l<=m;l++)//l记录左上角的纵坐标,r记录右下角的纵坐标  
			{
				while(r<=m&&ptr(i,l,j,r)<=k)//若此时的子矩阵满足条件,右下角的元素继续往右边移动,即纵坐标++ 
				r++;
				r--;//上面记录的右下角的元素并不满足条件才退出,所以此时回退一格 
				ans+=r-l+1;   
			}
		}
	}
	cout<<ans;
	return 0;
 } 
相关推荐
咬_咬13 小时前
C++仿muduo库高并发服务器项目:TcpServer模块
服务器·c++·accept·muduo·高并发服务器·tcpserver
simon_skywalker13 小时前
线性代数及其应用习题答案(中文版)第二章 矩阵代数 2.1 矩阵运算(1)
线性代数·算法·矩阵
天赐学c语言13 小时前
12.9 - 排序数组 && 野指针和空指针的区别
c++·算法·排序算法·leecode
NZT-4813 小时前
C++基础笔记(一)迭代器和vector
开发语言·c++·笔记
zzcufo13 小时前
QObject::startTimer: Timers cannot be started from another thread
网络·数据库·c++·windows
明洞日记13 小时前
【数据结构手册007】集合结构 - set与unordered_set的专精解析
数据结构·c++·set
Wild_Pointer.13 小时前
数据结构与算法精解:时间序列降采样算法LTOB
c++·算法
晚晶13 小时前
【Linux】opencv4.9.0静态库编译,开启opencl和EIGEN矩阵运算
linux·c++·opencv·矩阵·opencl
承渊政道13 小时前
C++学习之旅【C++类和对象(上)】
c语言·c++·学习·编辑器
Yupureki13 小时前
《算法竞赛从入门到国奖》算法基础:入门篇-高精度
c语言·数据结构·c++·算法·visual studio