专栏文章
题解:P11616 瓦解
P11616题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqe43xr
- 此快照首次捕获于
- 2025/12/04 03:18 3 个月前
- 此快照最后确认于
- 2025/12/04 03:18 3 个月前
我们可以先求出满足 的个数 ,然后答案就可以转化为依次求出在 个数内选出 个数的方案数。根据组合数学可以求出答案为 。
CPP#include<bits/stdc++.h>
// 7 10
// 9 23
// 1 6 7 8 9 20
typedef long long ll;
using namespace std;
int T;
int n,m;
ll a[10000010];
ll fac[10000010];
ll inv[10000010];
ll finv[10000010];
const ll mod=998244353;
ll fastpow(ll a, ll b) {
ll ans = 1, base = a;
while (b != 0) {
if (b & 1)
ans = (ans * base % mod) % mod;
base = (base * base) % mod;
b >>= 1;
}
ans %= mod;
return ans;
}
ll C(ll n,ll m){
if(m<0||m>n)return 0;
return fac[n]*finv[n-m]%mod*finv[m]%mod;
}
int main(){
inv[1]=1;
for(int i=2;i<=10000000;i++)inv[i]=((mod-mod/i)*inv[mod%i])%mod;
fac[0]=finv[0]=1;
for(int i=1;i<=10000000;i++)fac[i]=fac[i-1]*i%mod,finv[i]=finv[i-1]*inv[i]%mod;
cin>>T;
while(T--){
ll cnt=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
if(a[i]<=a[i-1]){
cnt++;
}
}
cnt++;
// if(m<cnt){
// puts("0");
// continue;
// }
// puts("Run");
ll ans=0;
for(int i=cnt;i<=m;i++){
ans+=C(n-cnt,i-cnt);
ans%=mod;
}
cout<<ans%mod<<endl;
}
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...