对于一个含有 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
化简题目给出的公式可以得到 A1 = An+1 + n*A0 - 2*Cn - ... - 2*n*C1
做题的时候注意力不集中,因为中间一个地方把i写成了n,找了半个小时的bug,好痛苦。。。
希望正式考试的时候注意力能集中。
#include<queue> #include<cmath> #include<cstdio> #include<string> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define maxn 1010 #define debug(a) cout << #a << " " << a << endl using namespace std; typedef long long ll; int main() { int n; cin >> n; double x,y; cin >> x >> y; double c[maxn]; for( int i = 1; i <= n; i ++ ) { cin >> c[i]; } double sum = 0.0; sum = y + n * x; int j = 1; for( int i = n; i >= 1; i -- ) { sum = sum - 2 * j * c[i]; //这里i让我写成了n,改了半个小时 j ++; } sum = ( sum * 1.0 ) / ( ( n + 1 ) * 1.0 ); printf("%.2lf ",sum); return 0; }