6A - Daydreamin
#include <iostream> #include <cstdio> using namespace std; typedef long long ll; ll dp[1000005]; // 第i天为晴天的概率 ll mod = 998244353; ll mulMod(ll a, ll b) { return (a % mod) * (b % mod) % mod; } ll plusMod(ll a, ll b) { return (a % mod + b % mod) % mod; } int main() { ios::sync_with_stdio(false); cin.tie(0); ll n, m, p, d, a, b, c; cin >> n >> m >> p >> d >> a >> b >> c; dp[0] = 1; // 第一天为晴天 ll ans = 0; ll k = plusMod(mulMod(d, c), mulMod(1 - d + mod, b)); // 台风天狩猎b和c的期望 // 前m天中第i天是晴天,之前必为晴天 for (int i = 1; i <= m; i++) { dp[i] = mulMod(dp[i - 1], 1 - p + mod); ans = plusMod(ans, plusMod(dp[i] * a, (1 - dp[i] + mod) * k)); } for (int i = m + 1; i <= n; i++) { dp[i] = plusMod(mulMod(dp[i - 1], 1 - p + mod), mulMod(dp[i - m - 1], p)); ans = plusMod(ans, plusMod(dp[i] * a, (1 - dp[i] + mod) * k)); } cout << ans << endl; }

更多精彩