链接:https://nanti.jisuanke.com/t/A1593
对于一个含有 n+2n+2 个元素的数列,A_0, A_1, \cdots A_nA0,A1,⋯An,满足这样的递归公式
\displaystyle A_i = \frac{A_{i-1} + A_{i + 1}}{2} - C_i\ \ \ 1 \le i \le nAi=2Ai−1+Ai+1−Ci 1≤i≤n
现在我们知道 A_0, A_{n + 1}A0,An+1 和 C_1, C_2, \cdots C_nC1,C2,⋯Cn。
现在请你帮忙计算 A_1A1 的值。
输入格式
第一行输入一个整数 n(1 \le n \le 1000)n(1≤n≤1000)。
第二行输入两个数 A_0A0 和 A_{n+1}An+1,接着是 nn 个数据分别是 C_1,C_2, \cdots C_nC1,C2,⋯Cn。所有的数据均是两位小数的浮点数。
输出格式
输出 A_1A1 的值,结果保留两位小数。
样例输入1复制
1
50.50 25.50
10.15
样例输出1复制
27.85
样例输入2复制
2
-756.89 52.52
172.22 67.17
样例输出2复制
-761.49
解析:
A2=2*A1-A0;
A3=2*A2-A1=3A1-2*A0;
A4=2*A3-A2=4*A1-3*A0;
递推公式 A(i+1)=2*Ai-A(i-1)+2*Ci
=> An=n*A1-(n-1)*A0+ sum(2*(n-i)*Ci) i=[1,n)
A1=A(n+1)+n*A0-sum(2*(n-i)*Ci) i=[1,n)
ac:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
double an1,a0,c;
scanf("%d",&n);
scanf("%lf%lf",&a0,&an1);
an1=an1+n*a0;
for(int i=0;i<n;i++)
{
scanf("%lf",&c);
an1-=2*(n-i)*c;
}
printf("%.2f\n",an1/(n+1));
return 0;
}
B | Integration |
解析:
裂项相消
求各项ci即可