数学题
大意
给定一个数组, 计算该数组所有子序列的和的和, 即
S=i=1∑nj=i∑nk=i∑jak=i=1∑nj=i∑nk=i∑jak
求解
对于任意x∈[1,n],ax被计算的次数
就等于集合{(i,j)∣1≤i≤j≤n}中i≤x≤j的次数
即
Cx=i=1∑xj=x∑n1=i=1∑x(n−x+1)=x(n−x+1)
总和
S=i=1∑nCiai=i=1∑n(i(n−i+1)ai)
实测: 高精度?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <iostream> #include <cstdio> using namespace std;
int main() { long long res = 0;
int n; cin >> n; for (int i = 1; i <= n; i++) { double x; cin >> x; res += (long long)(1000 * x) * i * (n - i + 1); }
printf("%.2f", res / 1000.0); return 0; }
|