/* ID: espr1t TASK: KEYWORDS: */ #include #include #include #include #include using namespace std; FILE* in = stdin; FILE* out = stdout; const int MAX = 1001; int n; int a[MAX][MAX]; int ans[MAX][MAX]; int main(void) { in = fopen("diagonalsum.in", "rt"); out = fopen("diagonalsum.out", "wt"); fscanf(in, "%d", &n); for (int i = 0; i < n; i++) { for (int c = 0; c < n; c++) { fscanf(in, "%d", &a[i][c]); } } for (int scol = 0; scol < n; scol++) { int sum = 0; for (int row = 0, col = scol; row < n && col < n; row++, col++) sum += a[row][col]; for (int row = 0, col = scol; row < n && col < n; row++, col++) ans[row][col] += sum; } for (int srow = 1; srow < n; srow++) { int sum = 0; for (int row = srow, col = 0; row < n && col < n; row++, col++) sum += a[row][col]; for (int row = srow, col = 0; row < n && col < n; row++, col++) ans[row][col] += sum; } for (int scol = 0; scol < n; scol++) { int sum = 0; for (int row = 0, col = scol; row < n && col >= 0; row++, col--) sum += a[row][col]; for (int row = 0, col = scol; row < n && col >= 0; row++, col--) ans[row][col] += sum; } for (int srow = 1; srow < n; srow++) { int sum = 0; for (int row = srow, col = n - 1; row < n && col >= 0; row++, col--) sum += a[row][col]; for (int row = srow, col = n - 1; row < n && col >= 0; row++, col--) ans[row][col] += sum; } int numQueries; fscanf(in, "%d", &numQueries); for (int q = 0; q < numQueries; q++) { int row, col; fscanf(in, "%d %d", &row, &col); row--, col--; fprintf(out, "%d\n", ans[row][col] - a[row][col]); } return 0; }