标签:
题目链接:UVA 10014
解题思路:
第一个想法是高斯消元,但貌似复杂度有点高,于是开始推公式,想了好久。
推导过程:
a[i-1] + a[i+1] = 2 * ( a[i] + c[i] )
a[1] + a[n] = 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[n] )
代码:
#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;
}
总结:
太久没做题,感觉脑袋要生锈
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/fuyukai/article/details/47617153