아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

불확실한 표본에 직선 맞추기

시간 제한2초메모리 제한256 MB

요약
불확실한 표본 값들과 기대 절댓값 편차가 가장 작아지는 직선을 찾아 최소 오차를 출력합니다.
난이도

어려움10점 중 8점

유형
이분 탐색, 기하, 수학
정답자
아직 제출이 없습니다

문제

알 수 없는 함수 F:R→RF : \mathbb{R} \to \mathbb{R}에서 얻은 유한한 표본점 집합에 함수를 맞추는 것은 수학의 기본 문제다. 가장 흔한 형태는 표본점에 가장 잘 맞는 일차함수 F‾\overline{F}를 찾는 것이다. FF를 x1<x2<⋯<xnx_1 < x_2 < \dots < x_n에서 표본으로 얻었다고 하자. F‾\overline{F}가 표본점에 얼마나 잘 맞는지는 다음 오차로 잴 수 있다.

error(F,F‾)=max⁡1≤i≤n∣F(xi)−F‾(xi)∣\text{error}(F, \overline{F}) = \max_{1 \le i \le n} \left| F(x_i) - \overline{F}(x_i) \right|

그런데 표본점에서의 함숫값을 정확히 알지 못한다. 대신 각 F(xi)F(x_i)의 이산확률분포를 알고 있다. 즉 가능한 값 yi,1,…,yi,miy_{i,1}, \dots, y_{i,m_i}와 그 확률 pi,jp_{i,j}가 주어지고, Pr⁡[F(xi)=yi,j]=pi,j\Pr[F(x_i) = y_{i,j}] = p_{i,j}이다. 이때 오차는 기댓값을 써서 다음과 같이 정의한다.

error(F,F‾)=max⁡1≤i≤nE[∣F(xi)−F‾(xi)∣]\text{error}(F, \overline{F}) = \max_{1 \le i \le n} E\left[ \left| F(x_i) - \overline{F}(x_i) \right| \right]

이 오차를 최소로 만드는 일차함수 F‾(x)=ax+b\overline{F}(x) = ax + b를 찾아, 그 최소 오차를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 표본점의 개수 nn이 주어진다 (1≤n≤1051 \le n \le 10^5). 다음 nn개의 줄에는 표본점의 정보가 xx가 증가하는 순서로 한 줄에 하나씩 주어진다. ii번째 표본점의 줄은 함수를 표본으로 얻은 위치 xix_i와 분포의 크기 mim_i로 시작한다 (0≤xi≤1090 \le x_i \le 10^9, 1≤mi≤101 \le m_i \le 10). 이어서 xix_i에서 가능한 함숫값 mim_i개 yi,1,…,yi,miy_{i,1}, \dots, y_{i,m_i}가 주어지고 (0≤yi,j<1090 \le y_{i,j} < 10^9), 마지막으로 확률 mim_i개 pi,1,…,pi,mip_{i,1}, \dots, p_{i,m_i}가 주어진다 (0≤pi,j≤1000 \le p_{i,j} \le 100). 실제 확률은 pi,jp_{i,j}를 100으로 나눈 값이고, 표본점 하나마다 확률 mim_i개의 합은 100이다. 모든 값은 정수이고 x1<x2<⋯<xnx_1 < x_2 < \dots < x_n이다. 입력의 마지막 줄에는 0이 하나 주어지며, 이 줄은 테스트 케이스가 아니다.

출력

각 테스트 케이스마다 최소 오차를 소수점 아래 한 자리까지 반올림해 한 줄에 출력한다. 정확히 중간인 값은 올린다. 예를 들어 0.25는 0.3으로 출력한다.

예제2

  1. 예제 1

    입력
    2
    0 2 0 1 50 50
    1 2 0 1 50 50
    0
    
    예상 출력
    0.5
    
  2. 예제 2

    입력
    1
    5 1 7 100
    1
    5 2 0 10 50 50
    3
    0 1 1 100
    1 1 3 100
    2 1 5 100
    0
    
    예상 출력
    0.0
    5.0
    0.0