题解(easy~)
2025-06-02 08:46:51
发布于:浙江
14阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> matrix(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
cin >> matrix[i][j];
}
}
vector<vector<int>> row_prefix(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; ++i) {
row_prefix[i][0] = 0;
for (int j = 1; j <= n; ++j) {
row_prefix[i][j] = row_prefix[i][j - 1] + matrix[i][j];
}
}
int ans = 0;
for (int c1 = 1; c1 <= n; ++c1) {
for (int c2 = c1; c2 <= n; ++c2) {
int L = c2 - c1 + 1;
vector<int> sum_row(n + 1, 0);
for (int i = 1; i <= n; ++i) {
sum_row[i] = row_prefix[i][c2] - row_prefix[i][c1 - 1];
}
vector<int> pre_sum(n + 1, 0);
for (int k = 1; k <= n; ++k) {
pre_sum[k] = pre_sum[k - 1] + sum_row[k];
}
unordered_map<int, int> hash_map;
hash_map[0] = 1;
int current_ans = 0;
for (int k = 1; k <= n; ++k) {
int current_val = 2 * pre_sum[k] - L * k;
current_ans += hash_map[current_val];
hash_map[current_val]++;
}
ans += current_ans;
}
}
cout << ans << endl;
return 0;
}
这里空空如也
有帮助,赞一个