계단 함수 근사

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

실수 함수 ff를 다른 함수로 근사한다는 것은, 어떤 성질을 만족하면서 ff 대신 사용해도 오차가 비교적 작은 실수 함수 gg를 찾는 것을 뜻한다. 보통 ggff보다 단순하고 값을 빠르게 계산할 수 있어야 한다.

계단 함수란 정의역을 [a,b)[a, b) 꼴의 구간들로 나눌 수 있고 각 구간 위에서 함수 값이 일정한 실수 함수를 말한다. 값이 일정하게 유지되는 이런 극대 구간 하나를 함수의 계단(stair) 이라고 부른다.

여기서 다루는 함수들은 정수 xx 좌표에서만 값이 바뀔 수 있다고 가정한다. 즉 정수 ii에 대해 구간 (i,i+1)(i, i+1) 위에서는 항상 일정하며, 우리가 관심을 두는 정의역은 [0,n)[0, n)이다.

계단이 최대 nn개인 계단 함수 ff를, 계단이 최대 kk개인 계단 함수 gg로 근사하려고 한다. 주어진 매개변수 pp에 대해 최소화하려는 오차는 다음과 같다.

i=0n1f(i)g(i)p\sum_{i=0}^{n-1} \left| f(i) - g(i) \right|^{p}

ff의 값들, gg가 가질 수 있는 계단의 최대 개수 kk, 그리고 pp가 주어질 때, 계단이 최대 kk개인 임의의 계단 함수 ggff를 근사할 때의 최소 오차를 구하고 그 값을 기약분수로 출력하여라.

입력

첫째 줄에 세 정수 nn, kk, pp가 공백 하나로 구분되어 주어진다 (1n40001 \le n \le 4000, 1k1001 \le k \le 100, p{1,2}p \in \{1, 2\}). nnff의 계단 개수이고, kkgg에 허용되는 계단의 최대 개수이다.

이어지는 nn개의 줄 중 ii번째 줄에는 정수 yiy_i가 하나씩 주어진다 (0yi10000 \le y_i \le 1000). 이는 구간 [i1,i)[i-1, i)에서의 ff의 값이며 1in1 \le i \le n이다.

출력

최소 오차는 분수가 될 수 있다 (p=2p = 2일 때 한 계단에서의 최적 상수는 그 구간 값들의 평균이다). 따라서 최소 오차를 기약분수로 출력한다.

최소 오차를 기약분수 ab\frac{a}{b} (단 b1b \ge 1, gcd(a,b)=1\gcd(a, b) = 1)로 나타내자. b=1b = 1이면 정수 aa 하나만 출력한다. 그렇지 않으면 a/b 형태로 (분자, 슬래시, 분모를 공백 없이) 출력한다.