蓝桥集训之统计子矩阵

统计子矩阵

  • 核心思想:矩阵前缀和 + 双指针

    • 用i和j双指针 遍历所有子矩阵的列
    • 用s和t双指针 遍历所有子矩阵的行
    • 求其子矩阵的和 若>k 将s向下移动 矩阵和必定减小(元素个数减少)
    • 直到满足<=k 因为列一定 行数即为方案数 (从t行往上数到s行 共t-s+1个区间[t,t][t-1,t]....[s,t])
cpp 复制代码
  #include<iostream>
  using namespace std;
  const int N = 510;
  typedef long long LL;
  int a[N][N];
  int n,m,k;
  
  int main()
  {
      cin>>n>>m>>k;
      for(int i=1; i<=n; i++){
          for(int j=1; j<=m; j++){
              cin >> a[i][j];
              a[i][j] += a[i-1][j] + a[i][j-1] - a[i-1][j-1];  //求前缀和数组
          }
      }
      LL res = 0;
      for(int i=1;i<=m;i++)  //遍历列
      {
          for(int j=i;j<=m;j++)
          {
              for(int s=1,t=1;t<=n;t++)  //遍历行
              {
                  while(s<=t && a[t][j] - a[s-1][j] - a[t][i-1] + a[s-1][i-1] > k)
                      s++;
                  if(s<=t) res += t-s+1;
              }
          }
      }
      cout<<res;
  }
相关推荐
C.L.L5 小时前
C++ vscode调试——如何方便查看动态二维矩阵
开发语言·c++·矩阵
铅笔小新z5 小时前
【C语言—数据结构】8种高效排序算法:从入门到实战
数据结构·算法·排序算法
Yolo_TvT5 小时前
数据结构:双链表
网络·数据结构
AKDreamer_HeXY5 小时前
AtCoder Beginner Contest 434 C-E 题解
c++·算法·前缀和·图论·差分·atcoder
geekmice5 小时前
在单线程环境下,同一个 Service 中多个方法需要复用某个 List
数据结构·windows·list
roman_日积跬步-终至千里5 小时前
【模式识别与机器学习(4)】主要算法与技术(中篇:概率统计与回归方法)之线性回归模型
算法·机器学习
小李小李快乐不已5 小时前
图论理论基础(2)
java·开发语言·c++·算法·图论
点云SLAM5 小时前
四元数 (Quaternion)微分-单位四元数 q(t) 的导数详细推导(10)
算法·计算机视觉·机器人·slam·imu·四元数·单位四元数求导
秋邱5 小时前
2025 年突破性科技:大模型驱动的实时多模态数据流处理系统
人工智能·科技·算法·机器学习
sin_hielo5 小时前
leetcode 2141
数据结构·算法·leetcode