계단 함수 근사
시간 제한1초메모리 제한128 MB
수열 f(0..n-1)을 최대 k개의 연속한 구간으로 나누고 각 구간을 상수로 근사할 때 |값 - f(i)|^p의 합을 최소로 하는 값을 구해 기약분수로 출력한다.
문제
실수 함수 를 다른 함수로 근사한다는 것은, 어떤 성질을 만족하면서 대신 사용해도 오차가 비교적 작은 실수 함수 를 찾는 것을 뜻한다. 보통 는 보다 단순하고 값을 빠르게 계산할 수 있어야 한다.
계단 함수란 정의역을 꼴의 구간들로 나눌 수 있고 각 구간 위에서 함수 값이 일정한 실수 함수를 말한다. 값이 일정하게 유지되는 이런 극대 구간 하나를 함수의 계단(stair) 이라고 부른다.
여기서 다루는 함수들은 정수 좌표에서만 값이 바뀔 수 있다고 가정한다. 즉 정수 에 대해 구간 위에서는 항상 일정하며, 우리가 관심을 두는 정의역은 이다.
계단이 최대 개인 계단 함수 를, 계단이 최대 개인 계단 함수 로 근사하려고 한다. 주어진 매개변수 에 대해 최소화하려는 오차는 다음과 같다.
의 값들, 가 가질 수 있는 계단의 최대 개수 , 그리고 가 주어질 때, 계단이 최대 개인 임의의 계단 함수 로 를 근사할 때의 최소 오차를 구하고 그 값을 기약분수로 출력하여라.
입력
첫째 줄에 세 정수 , , 가 공백 하나로 구분되어 주어진다 (, , ). 은 의 계단 개수이고, 는 에 허용되는 계단의 최대 개수이다.
이어지는 개의 줄 중 번째 줄에는 정수 가 하나씩 주어진다 (). 이는 구간 에서의 의 값이며 이다.
출력
최소 오차는 분수가 될 수 있다 (일 때 한 계단에서의 최적 상수는 그 구간 값들의 평균이다). 따라서 최소 오차를 기약분수로 출력한다.
최소 오차를 기약분수 (단 , )로 나타내자. 이면 정수 하나만 출력한다. 그렇지 않으면 a/b 형태로 (분자, 슬래시, 분모를 공백 없이) 출력한다.