思路
给定规则,模拟需要两层循环,会导致超时。
所以需要找规律:长度为len的数组里,第i个位置的数字需要出现(i+1)(len-i)*次
但还是有一个样例输出结果错误,此处的问题是浮点数多次运算,导致精度误差
因此我们可以通过把一些数据扩大一定的倍数进行运算,最后再除去扩大的倍数。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100003;
int len;
int main() {
cin>>len;
long long ans = 0;
for (int i = 0; i < len; i++) {
double temp;
cin>>temp;
ans += (long long)(temp * 1000) * (i + 1) * (len - i);
}
printf("%.2lf\n", ans/1000.0);
}