BOJ 5029 Statisticians
BOJ 5029 Statisticians
문제 내용
행 열의 사각 격자의 각 칸에 음이 아닌 정수가 하나씩 적혀 있습니다. 면적이 이상 이하인 직사각형 영역들에 들어 있는 모든 칸의 값들의 평균을 모아서, 그 중 중앙값을 출력하세요.
입력
첫 줄에는 과 가 주어집니다. (, )
다음 줄에는 와 가 주어집니다. ()
다음 줄에 걸쳐서 사각 격자의 각 칸에 적힌 수들이 주어집니다. 이 수들은 0 이상 이하입니다.
출력
문제의 정답을 소수점 이하 세 자리까지 출력하세요. 절대 오차가 미만이면 정답으로 인정됩니다.
문제 풀이
스포일러
먼저 범위 내의 모든 평균값을 2차원 누적합 배열에서 브루트포스하여 구합니다. 그런데 이들 중 중앙값을 구하기 위해 이를 정렬하기에는 시간과 메모리가 부족합니다.
오차 범위 내에서만 정확한 값들을 구하면 이상 이하의 정수로 퉁칠 수 있고, 이들은 모든 값을 나열하는 대신 개수를 세어 counting sort를 하는 것으로 중앙값을 구할 수 있습니다.
수의 개수가 짝수 개일 경우에 각 수를 정수로 바꿀 때 floor division을 했다면 두 값의 평균을 구하는 과정에서 오차가 누적될 수 있습니다. 따라서 앞의 “퉁치는” 과정에서 반올림을 하거나, 오차의 크기를 반으로 줄여서 단위로 정확한 답을 구하여 문제를 해결할 수 있습니다.
Last updated on