2601

/*
	a[i] = (a[i-1]+a[i+1])/2-c[i];
	(a[i]+c[i])*2=a[i-1]+a[i+1]
	a[i+1]=  (a[i]+c[i])*2-a[i-1];
	a[i] = (a[i-1]+c[i-1])*2-a[i-2]

	a[2] = (a[1]+c[1])*2-a[0] = 2*a[1]-a[0]+2*c[1]
	a[3] = (a[2]+c[2])*2-a[1] = ( (a[1]+c[1])*2-a[0]+c[2] )*2-a[1] = 
	                          = 4*(a[1]+c[1])-2*a[0]+2*c[2]-a[1]
							  = 3*a[1]-2*a[0]+2*c[2]+4*c[1]
	a[4] = (a[3]+c[3])*2-a[2] = 

*/

// include file
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <ctime>

#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <bitset>

#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <list>
#include <functional>

using namespace std;

// typedef
typedef __int64 LL;

// 
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)

#define Z(a,b) ((a)<<(b))
#define Y(a,b) ((a)>>(b))

const double eps = 1e-6;
const double INFf = 1e100;
const int INFi = 1000000000;
const LL INFll = (LL)1<<62;
const double Pi = acos(-1.0);

template<class T> inline T sqr(T a){return a*a;}
template<class T> inline T TMAX(T x,T y)
{
	if(x>y) return x;
	return y;
}
template<class T> inline T TMIN(T x,T y)
{
	if(x<y) return x;
	return y;
}
template<class T> inline T MMAX(T x,T y,T z)
{
	return TMAX(TMAX(x,y),z);
}
template<class T> inline T MMIN(T x,T y,T z)
{
	return TMIN(TMIN(x,y),z);
}
template<class T> inline void SWAP(T &x,T &y)
{
	T t = x;
	x = y;
	y = t;
}


// code begin
int n;
double a0,anplus1;
double c[3010];
int main()
{
	read;
	write;
	while(scanf("%d",&n)==1)
	{
		scanf("%lf %lf",&a0,&anplus1);
		for(int i=1;i<=n;i++)
			scanf("%lf",c+i);
		double a[2],b[2],t[2];
		a[0] = 2;
		a[1] = -a0+2*c[1];
		if(n==1)
		{
			printf("%.2f\n",(anplus1-a[1])/a[0]);
			continue;
		}
		b[0] = 3;
		b[1] = -2*a0+2*c[2]+4*c[1];
		if(n==2)
		{
			printf("%.2f\n",(anplus1-b[1])/b[0]);
			continue;
		}
		for(int i=4;i<=n+1;i++)
		{
			t[0] = b[0]*2-a[0];
			t[1] = (b[1]+c[i-1])*2-a[1];
			a[0] = b[0];
			a[1] = b[1];
			b[0] = t[0];
			b[1] = t[1];
		}
		printf("%.2f\n",(anplus1-t[1])/t[0]);

		//

	}
	return 0;
}

posted @ 2011-05-02 00:37  AC2012  阅读(173)  评论(0编辑  收藏  举报