蓝桥杯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;
}
相关推荐
To_OC9 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_8414956410 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
爱刷碗的苏泓舒14 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽16 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米16 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠17 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA19 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel19 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客19 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化