20分 Wrong Answer 求助 qaq
查看原帖
20分 Wrong Answer 求助 qaq
533544
WillHou楼主2022/9/24 12:17

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;
}
2022/9/24 12:17
加载中...