히스토그램
시간 제한3초메모리 제한1024 MB
1부터 n까지 값의 빈도 배열이 주어질 때, 이를 최대 B개의 연속한 구간으로 나누어 각 구간 평균과의 제곱 오차 합을 최소로 만든다.
문제
구간 의 자연수를 데이터 값이라 하고, 데이터 값 가 수열에 나타난 횟수를 데이터 값 의 빈도 라 하자. 예를 들어 수열 에서 데이터 값 의 빈도는 이다. 다음 빈도표는 구간 에 있는 값들의 빈도이다.
버킷 는 구간 와 대푯값 로 나타낸다. 각 버킷의 대푯값으로는 평균 빈도를 사용한다. 버킷들의 구간이 서로 겹치지 않고 빈도표에 있는 모든 데이터 값의 범위를 덮도록, 적은 수의 버킷으로 이루어진 히스토그램으로 빈도표를 나타내려고 한다. 예를 들어 위 빈도표를 두 개의 버킷으로 나타낸 히스토그램의 한 예에서 첫 번째와 두 번째 버킷은 각각 값의 범위 와 을 덮는다. 이 히스토그램에서 첫 번째와 두 번째 버킷의 평균 빈도는 각각 와 이다.
빈도표로부터 버킷의 집합을 구성한 뒤 어떤 값의 빈도를 물으면, 그 값이 속한 버킷의 평균 빈도를 답해야 한다. 예를 들어 값 의 빈도를 물으면 값 는 평균 빈도가 인 첫 번째 버킷에 속하므로, 값 의 실제 빈도 대신 를 답한다. 히스토그램에서 버킷의 오차는 그 버킷에 속한 모든 값의 빈도에 대한 제곱 오차의 합으로 정의한다. 위 히스토그램에서 구간 에 대한 첫 번째 버킷의 오차는 이고, 구간 에 대한 두 번째 버킷의 오차는 이다. 히스토그램의 오차는 히스토그램에 있는 모든 버킷의 오차의 합으로 정의한다. 따라서 이 히스토그램의 오차는 이다. 한편 다음 히스토그램의 오차는 이며, 이는 두 개의 버킷으로 이루어진 히스토그램의 오차 중 최솟값이다.
빈도표와 히스토그램의 버킷 수 가 주어질 때, 버킷이 최대 개인 히스토그램 중 오차가 최소인 히스토그램을 찾는 프로그램을 작성하라.
입력
표준 입력에서 입력을 읽는다. 입력의 첫째 줄에는 정수 ()가 주어지며, 는 버킷 수의 한계이다. 둘째 줄에는 정수 ()이 주어지며, 이는 데이터 값의 수로 범위 을 나타낸다. 다음 개 줄에는 데이터 값의 빈도가 주어진다. 그중 번째 줄에는 데이터 값 의 빈도 인 양의 정수가 주어지며, 이다.
출력
표준 출력에 출력한다. 정확히 한 줄을 출력한다. 그 줄에는 오차가 최소인 히스토그램의 오차값 를 나타내는 실수 를 출력한다. 출력 는 정수 부분, 소수점, 소수 부분으로 이루어진 형식이어야 하며, 를 만족해야 한다.