#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;
}
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄