[蓝桥杯 2022 省 B] 统计子矩阵
题目描述
给定一个 N × M N \times M N×M 的矩阵 A A A,请你统计有多少个子矩阵 (最小 1 × 1 1 \times 1 1×1, 最大 N × M ) N \times M) N×M) 满足子矩阵中所有数的和不超过给定的整数 K K K。
输入格式
第一行包含三个整数 N , M N, M N,M 和 K K K。
之后 N N N 行每行包含 M M M 个整数, 代表矩阵 A A A。
输出格式
一个整数代表答案。
样例 #1
样例输入 #1
3 4 10
1 2 3 4
5 6 7 8
9 10 11 12
样例输出 #1
19
提示
【样例说明】
满足条件的子矩阵一共有 19 19 19,包含:
大小为 1 × 1 1 \times 1 1×1 的有 10 10 10 个。
大小为 1 × 2 1 \times 2 1×2 的有 3 3 3 个。 大小为 1 × 3 1 \times 3 1×3 的有 2 2 2 个。
大小为 1 × 4 1 \times 4 1×4 的有 1 1 1 个。
大小为 2 × 1 2 \times 1 2×1 的有 3 3 3 个。
【评测用例规模与约定】
对于 30 % 30 \% 30% 的数据, N , M ≤ 20 N, M \leq 20 N,M≤20.
对于 70 % 70 \% 70% 的数据, N , M ≤ 100 N, M \leq 100 N,M≤100.
对于 100 % 100 \% 100% 的数据, 1 ≤ N , M ≤ 500 , 0 ≤ A i j ≤ 1000 , 1 ≤ K ≤ 2.5 × 1 0 8 1 \leq N, M \leq 500,0 \leq A_{i j} \leq 1000,1 \leq K \leq 2.5\times10^8 1≤N,M≤500,0≤Aij≤1000,1≤K≤2.5×108.文章来源:https://www.toymoban.com/news/detail-856069.html
蓝桥杯 2022 省赛 B 组 F 题。文章来源地址https://www.toymoban.com/news/detail-856069.html
AC代码:
#include<iostream>
using namespace std;
typedef long long ll;
const int N = 510;
ll a[N][N];
ll n, m, k;
ll sum[N][N];
int main()
{
cin >> n >> m >> k;
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= m; j ++)
{
cin >> sum[i][j];
sum[i][j] += sum[i - 1][j];
}
}
ll res = 0;
for(int i = 1; i <= n; i ++)
{
for(int j = i; j <= n; j ++)
{
for(ll l = 1, r = 1, s = 0; r <= m; r ++)
{
s += sum[j][r] - sum[i - 1][r];
while(s > k)
{
s -= sum[j][l] - sum[i - 1][l];
l ++;
}
res += r - l + 1;
}
}
}
cout << res << endl;
return 0;
}
到了这里,关于每日一题 第五十七期 洛谷 统计子矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!