F. Sakurako's Box

https://codeforces.com/problemset/problem/2008/F

题意:给定长度为n的数组a,现在要求数组a的选择任意两个数字乘积的期望值。

思路:乘积期望公式是mul(a[i], a[j]) / (n * (n - 1)) / 2,主要计算时间在有序数对的乘积和计算上,只要维护一个sum值,从前往后一次性计算a[i]与其他数字所有的乘积和,简化计算过程即可。

总结:expected value我知道是什么意思,期望值是什么鬼?哎。。。

inline void solve() {
    int n;
    cin >> n;

    vector<int> a(n);
    for (auto& x : a) {
        cin >> x;
    }

    long long sum = std::accumulate(a.begin(), a.end(), 0ll);
    MInt u, d;
    for (int i = 0; i < n; ++i) {
        sum -= a[i];
        u += (MInt)a[i] * sum;
    }

    d = 1ll * n * (n - 1) / 2;

    cout << (u / d) << '\n';

}
posted @ 2025-12-27 09:57  _Yxc  阅读(4)  评论(0)    收藏  举报