关于常数问题
  • 板块P11616 瓦解
  • 楼主hehy
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/27 00:22
  • 上次更新2025/1/27 14:15:32
查看原帖
关于常数问题
411334
hehy楼主2025/1/27 00:22

关于常数问题

我写的时间复杂度O(n)的代码T了一个

#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';
	}
}
/*
*/

2025/1/27 00:22
加载中...