蓝桥杯2022年第十三届省赛真题-统计子矩阵

题目链接:

代码思路:

①枚举上、下边界。

②求每一列前缀和。

②固定上下边界后,在通过双指针确定子矩阵的左右边界。双指针维护一个窗口 [l, r],确保窗口中所有列的和(下面前缀和-上面前缀和)不超过 K。通过滑动窗口方式,计算出以r为右端点的所有子矩阵的有效数量,也就是 子矩阵数量=r - l + 1;

代码如下:

cpp 复制代码
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N = 550;

int n, m, k;
int g[N][N];
//前缀和 竖
int s[N][N];
//答案
int ans;

signed main(){
    //读入
    cin >> n >> m >> k;
    for(int i = 1;  i<= n; i++){
        for(int j = 1; j <= m; j++){
            cin >> g[i][j];
            //计算前缀和
            s[i][j] = s[i-1][j] + g[i][j];
        }
    }
    
    //枚举 上 下 边界
    for(int i = 1; i <= n; i++){
        for(int j = i; j <= n; j++){
            //定义双指针
            int l = 1, sum = 0;
            for(int  r = 1; r <= m; r++){
                //加上 r 这一列
                sum += s[j][r] - s[i-1][r];
                //当sum>k
                while(sum > k){
                    //减去l那一列
                    sum -= s[j][l] - s[i-1][l];
                    l++;
                }
                //加上这个区间所有符合的矩阵数
                ans += r-l+1;
            }
        }
    }
    cout << ans << endl;
    return 0;
}
相关推荐
风暴之零25 分钟前
变点检测算法PELT
算法
深鱼~26 分钟前
视觉算法性能翻倍:ops-cv经典算子的昇腾适配指南
算法·cann
李斯啦果27 分钟前
【PTA】L1-019 谁先倒
数据结构·算法
梵刹古音32 分钟前
【C语言】 指针基础与定义
c语言·开发语言·算法
啊阿狸不会拉杆1 小时前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
R1nG8632 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
_OP_CHEN2 小时前
【算法基础篇】(五十六)容斥原理指南:从集合计数到算法实战,解决组合数学的 “重叠难题”!
算法·蓝桥杯·c/c++·组合数学·容斥原理·算法竞赛·acm/icpc
TracyCoder1232 小时前
LeetCode Hot100(27/100)——94. 二叉树的中序遍历
算法·leetcode
九.九2 小时前
CANN HCOMM 底层机制深度解析:集合通信算法实现、RoCE 网络协议栈优化与多级同步原语
网络·网络协议·算法
C++ 老炮儿的技术栈2 小时前
Qt Creator中不写代如何设置 QLabel的颜色
c语言·开发语言·c++·qt·算法