- 学术
CF1842G
- 2025-8-16 2:10:52 @
// Problem: CF1842G Tenzing and Random Operations
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF1842G
// Memory Limit: 1000 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mod = 1e9 + 7;
ll pw(ll b, ll p) {
ll res = 1;
b %= mod;
while (p > 0) {
if (p & 1) res = res * b % mod;
b = b * b % mod;
p >>= 1;
}
return res;
}
ll inv(ll n) {
return pw(n, mod - 2);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
ll m, v;
cin >> n >> m >> v;
vector<ll> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
vector<ll> dp(n + 1, 0);
dp[0] = a[0];
dp[1] = v;
for (int i = 2; i <= n; ++i) {
vector<ll> ndp(n + 1, 0);
ll r = (ll)(i - 1) * inv(i) % mod;
ndp[0] = a[i - 1] * dp[0] % mod;
ll rkm1 = 1;
for (int k = 1; k <= i; ++k) {
ll rk = rkm1 * r % mod;
ll t1 = 0;
if (k < i) {
t1 = (a[i - 1] + v * k % mod) % mod * rk % mod * dp[k] % mod;
}
ll t2 = v * rkm1 % mod * dp[k - 1] % mod;
ndp[k] = (t1 + t2) % mod;
rkm1 = rk;
}
dp = ndp;
}
ll ans = 0;
ll mf = 1;
ll mm = m % mod;
for (int k = 0; k <= n; ++k) {
ans = (ans + dp[k] * mf) % mod;
mf = mf * (mm - k + mod) % mod;
}
cout << ans << endl;
return 0;
}
0 条评论
目前还没有评论...