The Problem
There is a sequence of n+2 elements a0, a1,…, an+1 (n <= 3000; -1000 <= ai 1000). It is known that ai = (ai–1 + ai+1)/2 – ci for each i=1, 2, ..., n. You are given a0, an+1, c1, ... , cn. Write a program which calculates a1.
The Input
The first line is the number of test cases, followed by a blank line.
Each test case will be separated by a single line.
The Output
For each test case, the output file should contain a1 in the same format as a0 and an+1.
Print a blank line between the outputs for two consecutive test cases.
Sample Input
11
50.50
25.50
10.15
Sample Output
27.85题解:a[i]=(a[i-1]+a[i+1])*2+c[i] 所以:a[i+1]=2*a[i]+2*c[i]-a[i-1];
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
struct node
{
double a;
double dk;
}a[3010];
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
int n;
scanf("%d",&n);
a[0].dk=0;a[1].a=0;a[1].dk=1;
double pp,qq;
scanf("%lf%lf",&a[0].a,&qq);
int i;
for(i=1;i<=n;i++)
{
scanf("%lf",&pp);
a[i+1].a=2*pp+2*a[i].a-a[i-1].a;
a[i+1].dk=2*a[i].dk-a[i-1].dk;
}
printf("%.2lf\n",(qq-a[n+1].a)/a[n+1].dk);
if(t) printf("\n");
}
}
return 0;
}