社区讨论

关于常数问题

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@m6dtx0da
此快照首次捕获于
2025/01/27 00:23
去年
此快照最后确认于
2025/11/04 10:16
4 个月前
查看原帖

关于常数问题

我写的时间复杂度O(n)的代码T了一个
CPP
#include<bits/stdc++.h>
#define ll long long
#define md 998244353
using namespace std;
int T,n,m,a[10000005];
ll fac[10000005],inv[10000005];
ll ksm(ll x,int y){
	ll ans=1;
	for(;y;y/=2,x=x*x%md)if(y&1)ans=ans*x%md;
	return ans; 
}
void init(){
	fac[0]=inv[0]=1;
	for(int i=1;i<=10000000;i++)fac[i]=fac[i-1]*i%md; 
	inv[10000000]=ksm(fac[10000000],md-2);
	for(int i=9999999;i;i--)inv[i]=inv[i+1]*(i+1)%md;
}
ll C(int x,int y){
	return fac[x]*inv[y]%md*inv[x-y]%md;
}
signed main(){
	init();
	cin>>T;
	ll lst=0,sum=0,ans=0;
	while(T--){
		cin>>n>>m;
		for(int i=1;i<=n;i++)cin>>a[i];
		a[n+1]=0;
		lst=0,sum=0,ans=0;
		for(int i=1;i<=n+1;lst=a[i],i++)if(a[i]<=lst)sum++;
		if(sum>m){cout<<0<<'\n';continue;}
		for(int i=sum;i<=m;i++)(ans+=C(n-sum,i-sum))%=md;
		cout<<ans<<'\n';
	}
}
/*
*/

回复

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

正在加载回复...