比赛 20170919普及组 评测结果 AAWWWWA
题目名称 家的范围 最终得分 42
用户昵称 KingSann 运行时间 0.031 s
代码语言 C++ 内存使用 1.09 MiB
提交时间 2017-09-19 20:06:59
显示代码纯文本
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>

using namespace std;

#define FN "range"

const int N = 300;

int n, ans[N], pre[N][N], sub[N][N];

char mp[N][N];

int main() {
    freopen(FN ".in", "r", stdin);
    freopen(FN ".out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1 ; i <= n ; i ++) {
        scanf("%s", mp[i] + 1);
    }

    for(int i = 1 ; i <= n ; i ++) {
        for(int j = 1 ; j <= n ; j ++) {
            pre[i][j] += pre[i][j - 1] + (mp[i][j] == '1');
            sub[i][j] += sub[i - 1][j] + (mp[i][j] == '1');
        }
    }

    for(int i = 1 ; i <= n ; i ++) {
        for(int j = 1 ; j <= n ; j ++) {
            for(int k = 2 ; k <= n ; k ++) {
                int x = i + k - 1, y = j + k - 1;
                if(!(1 <= x && x <= n && 1 <= y && y <= n)) {
                    break;
                }
                if(pre[x][y] - pre[x][j - 1] == (y - j + 1) && sub[x][y] - sub[i - 1][j] == (x - i + 1)) {
                    ans[k] ++;
                } else {
                    break;
                }
            }
        }
    }
    for(int i = 2 ; i <= n ; i ++) {
        if(ans[i]) {
            printf("%d %d\n", i, ans[i]);
        }
    }
}