|
|
|
|
讨论 Discussion |
|
| |
答案 |
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int** grid = new int*[n];
for (int i = 0; i < n; ++i) {
grid[i] = new int[m];
for (int j = 0; j < m; ++j) {
cin >> grid[i][j];
}
}
long long** pre = new long long*[n + 1];
for (int i = 0; i <= n; ++i) {
pre[i] = new long long[m + 1]();
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1] + grid[i-1][j-1];
}
}
int res = 0;
int max_k = min(n, m);
for (int k = 2; k <= max_k; ++k) {
for (int i = 0; i <= n - k; ++i) {
for (int j = 0; j <= m - k; ++j) {
int x2 = i + k - 1;
int y2 = j + k - 1;
long long cnt1 = pre[x2+1][y2+1] - pre[i][y2+1] - pre[x2+1][j] + pre[i][j];
long long total = (long long)k * k;
if (abs(2 * cnt1 - total) <= 1) {
res++;
}
}
}
}
cout << res << endl;
for (int i = 0; i < n; ++i) {
delete[] grid[i];
}
delete[] grid;
for (int i = 0; i <= n; ++i) {
delete[] pre[i];
}
delete[] pre;
return 0;
}
( ) |
|
|
|
|
|
|
|
|
|
Flag |
|
题号 |
P1078 |
|
其它 |
通过 |
31人 |
提交 |
129次 |
通过率 |
24% |
难度 |
2 |
|
|
|
|
|
|