您的位置:首页 > 其它

UVA 10014(推公式)

2015-08-13 19:27 435 查看
题目链接:UVA 10014

解题思路:

第一个想法是高斯消元,但貌似复杂度有点高,于是开始推公式,想了好久。

推导过程:

a[i-1] + a[i+1] = 2 * ( a[i] + c[i] )

a[1] + a
= a[0] + a[n+1] - c[1:n]

n = 1, 2, 3, … n

(n+1) * a[1] = n*a[0] +a[n+1] - ( n*c[1] + (n-1)*c[2] + … + c
)

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n;
double a[3005],c[3005];

int main()
{
int T;
scanf("%d",&T);
int flag=0;
while(T--)
{
if(flag) printf("\n");
else flag=1;

memset(a,0,sizeof(a));
memset(c,0,sizeof(c));

scanf("%d",&n);
scanf("%lf %lf",&a[0],&a[n+1]);
for(int i=1;i<=n;i++)
scanf("%lf",&c[i]);

double sum = n*a[0] + a[n+1];
for(int i=1;i<=n;i++)
{
sum-=2*c[i]*(n-i+1);
}
sum/=(n+1);

printf("%.2lf\n",sum);
}

return 0;
}


总结:

太久没做题,感觉脑袋要生锈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: