题解
2025-07-05 09:57:31
发布于:浙江
4阅读
0回复
0点赞
#include <stdio.h>
#define MAX_N 250
int main() {
int N;
char grid[MAX_N + 1][MAX_N + 1];
int sum[MAX_N + 1][MAX_N + 1] = {0};
int count[MAX_N + 1] = {0};
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
scanf("%s", grid[i] + 1);
for (int j = 1; j <= N; j++) {
sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + (grid[i][j] == '1' ? 1 : 0);
}
}
for (int k = N; k >= 2; k--) {
for (int i = 1; i <= N - k + 1; i++) {
for (int j = 1; j <= N - k + 1; j++) {
int i2 = i + k - 1;
int j2 = j + k - 1;
int total = sum[i2][j2] - sum[i - 1][j2] - sum[i2][j - 1] + sum[i - 1][j - 1];
if (total == k * k) {
count[k]++;
}
}
}
}
for (int k = 2; k <= N; k++) {
if (count[k] > 0) {
printf("%d %d\n", k, count[k]);
}
}
return 0;
}
这里空空如也
有帮助,赞一个