[アルゴリズム]伯俊>#16507.暗闇が怖くて
1677 ワード
質問リンク
白駿#16507。暗闇が怖くて
解答方法
毎回区間と平均を求めると当然タイムアウトになるでしょう?なので区間組み合わせ配列を使いました!sumtable[r][C]の値はsumtable[1]からsumtable[r][C]の輝度までの和である.この区間組合せ配列を利用して、1時間で区間平均輝度を求めることができます~これは簡単な問題です!
白駿#16507。暗闇が怖くて
解答方法
毎回区間と平均を求めると当然タイムアウトになるでしょう?なので区間組み合わせ配列を使いました!sumtable[r][C]の値はsumtable[1]からsumtable[r][C]の輝度までの和である.この区間組合せ配列を利用して、1時間で区間平均輝度を求めることができます~これは簡単な問題です!
int area = sumTable[r2][c2] - (sumTable[r1 - 1][c2] + sumTable[r2][c1 - 1] - sumTable[r1 - 1][c1 - 1]);
area /= ((r2 - r1 + 1) * (c2 - c1 + 1));
コード#コード#import java.util.*;
public class BOJ16507 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int r = sc.nextInt();
int c = sc.nextInt();
int q = sc.nextInt();
int[][] sumTable = new int[r + 1][c + 1];
for (int i = 0; i <= c; i++) sumTable[0][i] = 0;
for (int i = 1; i <= r; i++) sumTable[i][0] = 0;
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++) {
sumTable[i][j] = sumTable[i][j - 1] + sumTable[i - 1][j] + sc.nextInt() - sumTable[i - 1][j - 1];
}
}
StringBuilder result = new StringBuilder();
while ((--q) >= 0) {
int r1 = sc.nextInt();
int c1 = sc.nextInt();
int r2 = sc.nextInt();
int c2 = sc.nextInt();
int area = sumTable[r2][c2] - (sumTable[r1 - 1][c2] + sumTable[r2][c1 - 1] - sumTable[r1 - 1][c1 - 1]);
area /= ((r2 - r1 + 1) * (c2 - c1 + 1));
result.append(area);
result.append("\n");
}
System.out.print(result.toString());
}
}
Reference
この問題について([アルゴリズム]伯俊>#16507.暗闇が怖くて), 我々は、より多くの情報をここで見つけました https://velog.io/@cchloe2311/알고리즘-백준-16507.-어두운-건-무서워テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol