傻啦吧唧整复杂了,然后因为频繁加减,会损失精度,有一个用例没过。居然被这么个简单题搞了。
没AC的代码
#include <iostream>
#include <cstdio>
#define MAX 100010
using namespace std;
int N;
double ar[MAX];
double sum[MAX];
double tot;
int main()
{
scanf("%d",&N);
sum[0] = 0;
for(int i=0;i<N;i++)
{
scanf("%lf",&ar[i]);
if(i==0)
sum[i+1] = ar[i];
else
sum[i+1] = sum[i]+ar[i];
//cout<<sum[i+1]<<endl;
}
double ans = 0.0;
for(int i=1;i<=N;i++)
tot+=sum[i];
ans = N*tot;
//cout<<ans<<endl;
for(int i=1;i<=N;i++)
{
ans-=2*(N-i+1)*(sum[i-1]);
//cout<<ans<<endl;
}
printf("%.2f\n",ans);
return 0;
}
AC代码
#include <iostream>
#include <cstdio>
#define MAX 100010
using namespace std;
int N;
int main()
{
scanf("%d",&N);
double ans = 0.0;
for(int i=1;i<=N;i++)
{
double x;
scanf("%lf",&x);
ans += x*i*(N+1-i);
}
printf("%.2f\n",ans);
return 0;
}