社区讨论

10pts求调

P11616[PumpkinOI Round 1] 瓦解参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m6f49b8l
此快照首次捕获于
2025/01/27 22:00
去年
此快照最后确认于
2025/11/04 10:14
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int mod = 998244353;
const int maxn = 1e7 + 5;
// ll inv2, inv3;

ll qpow(ll x, ll a)
{
    ll base = x, rt = 1;
    while (a)
    {
        if (a & 1)
            rt *= base, rt %= mod;
        base *= base, base %= mod;
        a >>= 1;
    }
    return rt;
}

ll inv(ll a)
{
    if (a < 0)
        a += mod;
    return qpow(a, mod - 2);
}

vector<ll> fac, ifac;

void init_fac()
{
    fac.resize(maxn), ifac.resize(maxn);
    fac[0] = fac[1] = 1;
    for (int i = 2; i < maxn; i++)
        fac[i] = fac[i - 1] * i % mod;
    ifac[maxn - 1] = inv(fac[maxn - 1]);
    for (int i = maxn - 2; i >= 0; i--)
        ifac[i] = ifac[i + 1] * (i + 1) % mod;
}

ll C(int n, int m)
{
    return fac[n] * ifac[m] % mod * ifac[n - m] % mod;
}

ll A(int n, int m)
{
    if (m < 0)
        return 1;
    return fac[n] * ifac[n - m] % mod;
}

void solve()
{
    int n, m, k = 0;
    cin >> n >> m;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 2; i <= n; i++)
    {
        if (a[i] <= a[i - 1])
            k++;
    }
    int ans = 0;
    for (int i = 0; i <= m - k - 1; i++)
        ans += C(n - 1 - k, i) % mod;
    // if (k > m - 1)
    //     cout << 0 << '\n';
    cout << ans << '\n';
}

void init() { init_fac(); }

int main()
{
    init();
    // solve();
    int T;
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> T;
    while (T--)
    {
        solve();
    }
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...