PTA乙级1049
不能直接两重循环数据是1e5会超时
这样
#include"bitsdc++.h"
using namespace std;
const int N=1e5+10;
double a[N],s[N];
double ans;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) scanf("%lf",&a[i]);
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
for(int i=0;i<=n;i++)
{
for(int j=i;j<=n;j++)
ans+=(s[j]-s[i]);
}
printf("%.2lf",ans);
return 0;
}
需要找数学规律
另外要注意用long double不然会有一个测试点过不了
#include"bits/stdc++.h"
using namespace std;
const int N=1e5+10;
long double a[N];
long double ans;
int main()
{
int n;
cin>>n;
for(int i=0;i<=n;i++)
{
scanf("%llf",&a[i]);
ans+=(n-i)*a[i]*(i+1);
}
printf("%.2llf",ans);
return 0;
}

浙公网安备 33010602011771号