社区讨论
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 条回复,欢迎继续交流。
正在加载回复...