概述
P r o b l e m mathrm{Problem} Problem
S o l u t i o n mathrm{Solution} Solution
根据期望的线性性: E ( x + y ) = E ( x ) + E ( y ) mathrm E(x+y)=mathrm E(x)+mathrm E(y) E(x+y)=E(x)+E(y).
那么有 E ( ∑ i = 1 m a i ) = ∑ i = 1 m E ( a i ) mathrm E(sum_{i=1}^{m} a_i)=sum_{i=1}^{m} mathrm E(a_i) E(∑i=1mai)=∑i=1mE(ai).
对于任意 i i i 有 E ( a i ) = ∑ j = 1 i a j × p [ i ] [ j ] . j mathrm E(a_i)=sum_{j=1}^{i} a_jtimes p[i][j] .j E(ai)=∑j=1iaj×p[i][j] .j表示 a j a_j aj 的权值为数列中的位置
p [ i ] [ j ] p[i][j] p[i][j]表示第 i i i 个位置出现 a j a_j aj 的概率。则有: p [ i ] [ j ] = 1 i × ∑ k = 1 i − 1 p [ k ] [ j − 1 ] p[i][j]=frac{1}{i} times sum_{k=1}^{i-1} p[k][j-1] p[i][j]=i1×k=1∑i−1p[k][j−1]
显然只需要前面的某一次出现了 j − 1 j-1 j−1 下一次就能弄到 j j j 。
并且有 i i i 种相同的情况,因此需要除以 i i i (还要包含 0 0 0)。
C o d e mathrm{Code} Code
#include <cstdio>
#include <iostream>
#define int long long
using namespace std;
const int N = 2000;
const int P = 998244353;
int n;
int a[N], p[N][N], f[N], inv[N];
int read(void)
{
int s = 0, w = 0; char c = getchar();
while (c < '0' or c > '9') w |= c == '-', c = getchar();
while (c >= '0' and c <= '9') s = s*10+c-48, c = getchar();
return w ? -s : s;
}
int power(int a,int b)
{
int res = 1;
while (b > 0)
{
if (b & 1) res = res * a % P;
a = a * a % P; b >>= 1;
}
return res;
}
signed main(void)
{
freopen("kiseki.in","r",stdin);
freopen("kiseki.out","w",stdout);
n = read(), n = read();
for (int i=1;i<=n;++i) a[i] = read();
for (int i=1;i<=n;++i) inv[i] = power(i,P-2);
p[0][0] = 1, f[0] = 0;
for (int i=1;i<=n;++i)
for (int j=1;j<=i;++j)
{
for (int k=0;k<i;++k)
p[i][j] = (p[i][j] + p[k][j-1] * inv[i]) % P;
f[i] = (f[i] + a[j] * p[i][j]) % P;
}
int ans = 0;
for (int i=1;i<=n;++i)
ans = (ans + f[i]) % P;
cout<<ans<<endl;
return 0;
}
最后
以上就是仁爱鱼为你收集整理的『数学期望』空之轨迹kiseki的全部内容,希望文章能够帮你解决『数学期望』空之轨迹kiseki所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复