자기상관 함수

꼭짓점으로 주어진 조각별 선형 함수에 대해 주어진 이동량 r에서 f(x)f(x+r)의 전 구간 적분값을 계산한다.

보통5수학기하구현시뮬레이션면접 대비아직 제출이 없습니다시간 제한8초메모리 제한512 MB

문제

자기상관 함수는 신호를 자기 자신의 평행이동한 복사본과 비교해 얼마나 닮았는지 재는 도구다. 실수 전체에서 정의된 연속 함수 f(x)f(x)의 자기상관 함수 Rf(r)R_f(r)는 다음과 같다.

Rf(r)=f(x)f(x+r)dxR_f(r) = \int_{-\infty}^{\infty} f(x)\,f(x + r)\,dx

여기서 rr은 실수다.

이 문제에서 다루는 ff는 조각마다 일차인 연속 함수다. ffxx좌표가 서로 다른 nn개의 끝점 (x1,y1)(x_1, y_1)부터 (xn,yn)(x_n, y_n)까지로 주어지고, 이웃한 두 끝점은 선분으로 이어진다. 첫 끝점과 마지막 끝점의 yy좌표는 0이고, 구간 [x1,xn][x_1, x_n] 바깥에서 ff의 값은 0이다. 아래 그림은 이런 함수의 예다.

주어지는 함수의 예

ffrr이 주어질 때 Rf(r)R_f(r)의 값을 구하는 프로그램을 작성한다.

입력

입력은 여러 개의 데이터 집합으로 이루어진다.

각 데이터 집합의 첫 줄에 정수 nn (3n1003 \le n \le 100)과 실수 rr (100r100-100 \le r \le 100)이 주어진다. nnff를 이루는 끝점의 개수이고, rr은 자기상관 함수의 매개변수다. 이어지는 nn개의 줄 가운데 ii번째 줄에는 ii번째 끝점의 좌표인 두 정수 xix_i (100xi100-100 \le x_i \le 100)와 yiy_i (50yi50-50 \le y_i \le 50)가 주어진다. 끝점은 xx좌표가 증가하는 순서로 주어지고, xx좌표가 같은 두 끝점은 없다. 첫 끝점과 마지막 끝점의 yy좌표는 항상 0이다.

입력의 끝은 nnrr이 모두 0인 줄로 표시한다. 이 줄은 데이터 집합이 아니므로 처리하지 않는다.

출력

각 데이터 집합마다 Rf(r)R_f(r)의 값을 한 줄에 하나씩 출력한다. 값은 소수점 아래 일곱째 자리에서 반올림해 소수점 아래 여섯 자리까지 적는다. 값이 0이면 -0.000000이 아니라 0.000000을 출력한다.