蓝桥杯每日一题2023.9.18

蓝桥杯2022年第十三届省赛真题-统计子矩阵 - C语言网 (dotcpp.com)

题目描述

给定一个 N × M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 × 1,最大 N × M) 满足子矩阵中所有数的和不超过给定的整数 K?

分析

如果不考虑范围问题等,可以用二位前缀和,一步一步列举

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int n, m, k, ans, a[N][N], s[N][N];
int main()
{
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= m; j ++)
		{
			cin >> a[i][j];
		}
	}
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= m; j ++)
		{
			s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
		}
	}
	ans = 0;
	for(int x1 = 1; x1 <= n; x1 ++)
	{
		for(int y1 = 1; y1 <= m; y1 ++)
		{
			for(int x2 = x1; x2 <= n; x2 ++)
			{
				for(int y2 = y1; y2 <= m; y2 ++)
				{
					if (s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1] <= k)ans ++;
				}
			}
		}
	}
	cout << ans;
	return 0;
}

但是四重循环会使时间超限

故可以考虑优化

将上下边界进行循环,使用双指针来列出左右边界,由于范围一定 <= k,故超过这个的话就移动指针

将上下枚举出来就可以看成一个一维问题,可以将每一列看成一个元素,相当于一个一维数组,在这个数组里找到哪些区间 <= k

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int n, m, k, sum, ans, a[N][N], s[N][N];
int main()
{
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= m; j ++)
		{
			cin >> a[i][j];
		}
	}
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= m; j ++)
		{
			s[i][j] = s[i - 1][j] + a[i][j];//算出这一列的前缀和 
		}
	}
	for(int i = 1; i <= n; i ++)//枚举上边界 
	{
		for(int j = i; j <= n; j ++)//枚举下边界 
		{
			for(int l = 1, r = 1, sum = 0; r <= m; r ++)//枚举左右边界 
			{
			 	sum += s[j][r] - s[i - 1][r];
			 	while(sum > k)
			 	{
			 		sum -= s[j][l] - s[i - 1][l];
			 		l ++;
				}
				ans += r - l + 1;
			} 
		}
	}
	cout << ans;
	return 0;
}
相关推荐
学顶教育13 小时前
学顶教育:公务员面试常见问题!
面试·职场和发展
人才风控观察周刊17 小时前
教育机构人员背调方案的方案能力证据、版本与复审周期是否透明可
职场和发展
青少儿编程课堂20 小时前
2026蓝桥杯青少组:校园飞鸟穿越赛解析
蓝桥杯·scratch·少儿编程·图形化编程·蓝桥杯青少组
重生之小比特21 小时前
【算法拾光】二分查找|二分查找 + 再排序数组中查找元素的第一个和最后一个位置
算法·leetcode·职场和发展
招聘背调实务专家杨宏1 天前
上级评价出现主观偏差与口径冲突时如何校准
职场和发展
职豚求职小程序2 天前
中国铁塔2027届校招开启,网申怎么投、笔试面试怎么准备?
面试·职场和发展
冲冲那年2 天前
项目整合管理
职场和发展
零售校长2 天前
二七区零售门店店长面试,重点在哪几处
面试·职场和发展·零售
背景调查知识库2 天前
职业背景调查中的异常复核与候选人说明如何识别?
职场和发展
张张123y2 天前
后端第十三课:大模型评测(Evals)从 0 到 1——看完面试能讲明白
后端·面试·职场和发展·大模型评测·evals