#1764 적분의 근사값 구하기

11  1 s   128 MB  

Description

아주대학교에 들어와 열심히 학업에 몰두하던 Noname은 Calculus I 과목을 수강하던 도중 컴퓨터를 이용하여 다항함수 (Polynomial Function)에 대한 리만 합을 계산하는 프로그램을 작성하기로 결심하였다.

 
리만 합에 대한 위키페디아 (http://www.wikipedia.org/)의 설명은 아래와 같다.
 
수학에서, 리만 합은 적분의 값을 근사하는 데 사용되는 방법이다. 또한 새로운 적분 연산을 정의하기 위해 사용되기도 한다. 이 이름은 베른하르트 리만을 따서 붙여졌다.
실수의 부분집합 D에서 정의되는 함수 f : D → R 를 생각하자. 그리고 I = [a, b]인 닫힌 구간이 D안에 들어있다고 하자. 점들의 유한 집합 {x0, x1, x2, ...xn}은 a = x0 < x1 < x2 < ... < xn = b이고 I안에 들어있는 다음의 분할(partition)을 생성한다.:
 
P = {[x0, x1), [x1, x2), ...[xn−1, xn]}
만약 P 가 I 의 n개의 원소들을 가지는 분할이라면, I 상에서 분할 P 를 가지는 f 의 리만 합은 다음과같이 정의된다. :
S = ∑( f(y1)(x1 − x0) ~ f(yn)(yn - yn-1) )
 
여기서 xi−1 ≤ yi ≤ xi이며, 구간 내에서 yi의 선택은 임의적이다. 모든 i에 대하여 yi = xi라면 S는 오른쪽 리만 합으로, yi = xi−1 라면 왼쪽 리만 합, yi = (xi+xi−1) / 2라면 가운데 리만 합으로 각각 불린다. 왼쪽 리만 합과 오른쪽 리만 합의 평균을 취한 것이 사다리꼴 합(Trapezoidal sum)이라고 불리는것과 같다.
왼쪽 리만 합, 오른쪽 리만 합, 가운데 리만 합에 대한 추가 설명은 아래와 같다.
 
2차 평면에서의 다항함수가 주어졌을 때 사다리꼴 리만 합을 제외한 나머지 왼쪽 리만 합, 오른쪽 리만 합, 가운데 리만 합 중 원하는 값을 출력하는 프로그램을 작성해보자.
 

Input

입력은 여러개의 테스트 케이스로 이뤄지며, 입력의 첫 줄에는 테스트 케이스의 개수 T ( 1 ≤ T ≤ 50 )가 주어진다.

각 테스트 케이스의 입력 값은 한 줄로 구성되어 있다.
각 테스트 케이스의 첫 줄에는 구하게 될 리만 합의 종류 K가 대문자로 주어진다. ( K = ‘L’ : 왼쪽 리만 합, K = ‘R’ : 오른쪽 리만 합, K = ‘M’ : 가운데 리만 합 )
같은 줄에 다항함수의 차수인 음이 아닌 정수 R 이 주어지고 ( 0 ≤ R ≤ 10 ), R개의 각 차수의 항에 대한 계수들의 수열 CR,CR−1, . . . ,C0가 입력으로 주어진다. Ci는 xi의 계수를 뜻한다 ( 단, −20 ≤ Ci ≤ 20, Ci 는 정수 ).
같은 줄에 분할할 구간 [a, b]가 주어지고 구간을 분할할 개수 N 이 입력으로 주어진다. ( 단, a, b는 구간 [-2, 2] 사이의 실수이고, N 은 1000 이하의 자연수이다. )

Output

Input에서 주어진 리만 합의 종류로 계산한 지정된 구간 [a,b] 에서의 넓이를 출력한다. ( 단, 결과는 소숫점 이하 셋째 자리에서 반올림한 값을 출력한다. )  여기서 넓이란 왼쪽, 오른쪽, 가운데 리만합의 정의에 의해 만들어진 사각형들의 총 넓이를 의미한다.

Sample Input

Sample Output

1
L 2 1 0 0 -2 2 4
6.00

Source

2011 Ajou University Programming Contest, Division 1