题目链接:https://nanti.jisuanke.com/t/20688
样例输入1
1 50.50 25.50 10.15
样例输出1
27.85
样例输入2
2 -756.89 52.52 172.22 67.17
样例输出2
-761.49
思路:
要求出A1的值,我们可以设置A1的值为0,然后算出A'[n + 1],与A[n + 1]相比的差值。
理论上他们的差值是(n + 1)个A1;
因为:(以下忽略了Ci)
A2 = 2 * A1 - A0 -> A2里边有两个A1
A3 = 2 * A2 - A1 -> A2里边有2 *2 - 1 = 3个A1
A4= 2 * A3 - A2 -> A2里边有3 *2 - 2 = 4个A1
………………………………………………
依次,我们会发现An里边有n个A1,自然A[n + 1]里边包含了n + 1个A1。
原来我们把A1设置为0,相当于去除了A1.所以他们的差值就是(n + 1)* A1;
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
typedef long long ll;
#define clr(x,y) memset(x,y,sizeof x)
#define INF 0x3f3f3f3f
double a[maxn];
int main()
{
int n;
while( ~ scanf("%d",&n))
{
double x,y;scanf("%lf%lf",&x,&y);
a[0] = x;a[1] = 0;
for(int i = 2;i <= n + 1;i ++)
{
double t;scanf("%lf",&t);
a[i] = a[i - 1] *2 - a[i - 2] + 2 * t;
}
double ans = (y - a[n + 1])/(n + 1);
printf("%.2f\n",ans);
}
return 0;
}