蓝桥集训之统计子矩阵

统计子矩阵

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

    • 用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;
  }
相关推荐
吃好睡好便好9 小时前
Matlab中三种三维图的对比
开发语言·人工智能·学习·算法·matlab·信息可视化
代码改善世界9 小时前
【C++进阶】二叉搜索树
java·数据结构·c++
1570925113410 小时前
回溯算法基础分享
算法·深度优先
脆皮炸鸡75510 小时前
进程通信----命名管道
linux·经验分享·笔记·算法·学习方法
如竟没有火炬10 小时前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划
想带你从多云到转晴10 小时前
优选算法---双指针
java·算法
小O的算法实验室10 小时前
2026年IEEE TSMC,基于Q学习平衡全局与局部搜索的防空资源分配问题进化算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
谙弆悕博士10 小时前
快速学C语言——第17章:多文件编程与头文件规范
c语言·开发语言·算法·学习方法·头文件·多文件编程
水蓝烟雨11 小时前
2359. 找到离给定两个节点最近的节点
算法·leetcode
澈20711 小时前
哈希表:O(1)查找的终极指南
算法·哈希算法·散列表