336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
문제 : https://www.acmicpc.net/problem/16507
2차원 배열 형태로의 부분 합 문제이다.
부분 합을 구할 때와 범위 합을 리턴할 때 계산을 주의하면 된다.
또한 평균을 구하는 것이니 부분 합을 칸의 개수로 나눠주면 된다.
#include <iostream>
using namespace std;
int r, c, q;
int table[1001][1001];
int psum[1001][1001];
void partialSum(){
for(int i = 1; i <= r; i++)
for(int j = 1; j <= c; j++)
psum[i][j] = psum[i-1][j] + psum[i][j-1] - psum[i-1][j-1] + table[i][j];
}
int getAvg(int r1, int c1, int r2, int c2){
int summ = psum[r2][c2] - psum[r1-1][c2] - psum[r2][c1-1] + psum[r1-1][c1-1];
int cnt = (r2-r1+1) * (c2-c1+1);
return summ / cnt;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> r >> c >> q;
for(int i = 1; i <= r; i++)
for(int j = 1; j <= c; j++)
cin >> table[i][j];
partialSum();
for(int i = 0 ; i < q; i++){
int r1, c1, r2, c2;
cin >> r1 >> c1 >> r2 >> c2;
cout << getAvg(r1, c1, r2, c2) << '\n';
}
return 0;
}
'PS > 백준 문제풀이' 카테고리의 다른 글
[백준 1068] 트리 (0) | 2019.08.17 |
---|---|
[백준 5397] 키로거 (0) | 2019.08.09 |
[백준 10986] 나머지 합 (0) | 2019.08.08 |
[백준 16139] 인간-컴퓨터 상호작용 (0) | 2019.08.07 |
[백준 17203] ∑|ΔEasyMAX| (0) | 2019.08.07 |