RT,请大佬指出错误,谢谢。
(不会是我题目理解错了吧)
#include <iostream>
const int N = 109;
int n, a[N][N];
long long ans = 0;
struct Node {
int x, y;
} lt, lb, rt, rb;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%01d", &a[i][j]);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
if (a[i][j] == 1) {
Node lt, lb, rt, rb;
lt = lb = rt = rb = {i, j};
while (true) {
lt.x--, lt.y--;
lb.x++, lb.y--;
rt.x--, rt.y++;
rb.x++, rb.y++;
if (lt.x<0 or lt.x>n or lt.y<0 or lt.y>n) break;
if (lb.x<0 or lb.x>n or lb.y<0 or lb.y>n) break;
if (rt.x<0 or rt.x>n or rt.y<0 or rt.y>n) break;
if (rb.x<0 or rb.x>n or rb.y<0 or rb.y>n) break;
if (a[lt.x][lt.y] and a[lb.x][lb.y] and a[rt.x][rt.y] and a[rb.x][rb.y]) {
ans++;
// printf("%d %d %d %d %d %d %d %d\n", lt.x, lt.y, lb.x, lb.y, rt.x, rt.y, rb.x, rb.y);
} else break;
}
}
if (a[i+1][j]==1 and a[i][j+1]==1 and a[i+1][j+1]==1) {
ans++;
Node lt, lb, rt, rb;
lt = {i, j};
lb = {i+1, j};
rt = {i, j+1};
rb = {i+1, j+1};
// printf("%d %d %d %d %d %d %d %d\n", lt.x, lt.y, lb.x, lb.y, rt.x, rt.y, rb.x, rb.y);
while (true) {
lt.x--, lt.y--;
lb.x++, lb.y--;
rt.x--, rt.y++;
rb.x++, rb.y++;
if (lt.x<0 or lt.x>n or lt.y<0 or lt.y>n) break;
if (lb.x<0 or lb.x>n or lb.y<0 or lb.y>n) break;
if (rt.x<0 or rt.x>n or rt.y<0 or rt.y>n) break;
if (rb.x<0 or rb.x>n or rb.y<0 or rb.y>n) break;
if (a[lt.x][lt.y] and a[lb.x][lb.y] and a[rt.x][rt.y] and a[rb.x][rb.y]) {
ans++;
// printf("%d %d %d %d %d %d %d %d\n", lt.x, lt.y, lb.x, lb.y, rt.x, rt.y, rb.x, rb.y);
} else break;
}
}
}
printf("%lld", ans);
return 0;
}