만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

자기상관 함수

면접 대비

시간 제한8초메모리 제한512 MB

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

보통10점 중 5점

유형
수학, 기하, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

자기상관 함수는 신호를 자기 자신의 평행이동한 복사본과 비교해 얼마나 닮았는지 재는 도구다. 실수 전체에서 정의된 연속 함수 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는 조각마다 일차인 연속 함수다. ff는 xx좌표가 서로 다른 nn개의 끝점 (x1,y1)(x_1, y_1)부터 (xn,yn)(x_n, y_n)까지로 주어지고, 이웃한 두 끝점은 선분으로 이어진다. 첫 끝점과 마지막 끝점의 yy좌표는 0이고, 구간 [x1,xn][x_1, x_n] 바깥에서 ff의 값은 0이다. 아래 그림은 이런 함수의 예다.

주어지는 함수의 예

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

입력

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

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

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

출력

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

예제2

  1. 예제 1

    입력
    3 1
    0 0
    1 1
    2 0
    11 1.5
    0 0
    2 7
    5 3
    7 8
    10 -5
    13 4
    15 -1
    17 3
    20 -7
    23 9
    24 0
    0 0
    
    예상 출력
    0.166667
    165.213542
    
  2. 예제 2

    입력
    3 0
    0 0
    1 1
    2 0
    0 0
    
    예상 출력
    0.666667