解法
問題文がおかしい? 誤解していたが,テストケースを見て読み取れた. 正しくは,\(X+0.5\)秒の時点で曲0が流れている確率. 時刻 \(y \in [0,X]\) において,\(y\) に曲が開始される確率を求めておけば十分. これは dp で求まる. 計算量は,全体で\(O(NX)\). dpをする際,状態が\(O(X)\), 遷移が\(O(N)\).
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main() {
ll n, x;
cin >> n >> x;
vll a(n); rep(i,n) { cin >> a[i]; }
dp[0] = 1;
mint inv = mint(1)/mint(n);
rep(y,x+1) rep(i,n) {
if(y+a[i] <= x) dp[y+a[i]] += dp[y]*inv;
}
mint ans = 0;
rep(y,x+1) if(y+a[0] > x){
ans += dp[y]*inv;
}
cout << ans.val() << endl;
return 0;
}