2011-12-20 04:48:49

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2086

题意:中文。

mark:由Ai = (Ai-1 + Ai+1)/2 - Ci 得Ai=2(Ai-1+Ci-1)-Ai-2。

用a0、a1和c来表示Ai,递推求得An+1=a0*A0+a1*A1+C。解方程。

代码:

# include <stdio.h>
# include <string.h>


typedef struct NODE{
double a0, a1 ;
double c ;
}NODE ;


NODE node[3010] ;
double c[3010] ;
int n ;


double calc(double a, double b)
{
int i ;
memset(node, 0, sizeof(node)) ;
node[0].a0 = node[1].a1 = 1 ;
for (i = 2 ; i <= n+1 ; i++)
{
node[i].a0 = 2*node[i-1].a0 - node[i-2].a0 ;
node[i].a1 = 2*node[i-1].a1 - node[i-2].a1 ;
node[i].c = 2 * node[i-1].c - node[i-2].c + 2*c[i-1] ;
}
return (b - a*node[n+1].a0 - node[n+1].c)/node[n+1].a1 ;
}


int main ()
{
int i ;
double a, b ;
while (~scanf ("%d", &n))
{
scanf ("%lf%lf", &a, &b) ;
for (i = 1 ; i<= n ; i++)
scanf ("%lf", &c[i]) ;
printf ("%.2lf\n", calc(a,b)) ;
}
return 0 ;
}