OI VIII - map

// https://szkopul.edu.pl/problemset/problem/0QusZwo2JAyvhPj1JIKRc8H7/site/?key=statement

#include <iostream>

constexpr int sizik = 1024;

int mapa[sizik][sizik];
int _ans[sizik][sizik];

int n, r;

int index(int a) {
    return std::min(std::max(0, a), n);
}

int main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    std::cin >> n >> r;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            int a;
            std::cin >> a;
            mapa[i][j] = a;
        }
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            mapa[i][j] = mapa[i][j] + mapa[i - 1][j] + mapa[i][j - 1] - mapa[i - 1][j - 1];
        }
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            int sum = mapa[index(i + r)][index(j + r)] - mapa[index(i - r - 1)][index(j + r)] - mapa[index(i + r)][index(j - r - 1)] +
                      mapa[index(i - r - 1)][index(j - r - 1)];

            _ans[i][j] = sum;
        }
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            std::cout << _ans[i][j] << " ";
        }
        std::cout << '\n';
    }

    return 0;
}