Count Sequences

Count Sequences

考虑枚举序列的长度为\(i\),相当于从\(R-L+1\)种数选\(i\)个的组合方案数。

\(ans=\sum\limits_{i=1}^{n}{\binom{R-L+i}{i}}\)

\(k=R-L\)

\(ans=\sum\limits_{i=1}^{n}{\binom{k+i}{k}}=\sum\limits_{i=1}^{n+k}{\binom{i}{k}}\)

由变上项求和公式得:

\(ans=\binom{n+k+1}{k+1}-1=\binom{n+R-L+1}{R-L+1}-1\)

#include<bits/stdc++.h>
using namespace std;
int mod=1e6+3;
long long pre[2000005],inv[2000005];
int T;
long long n,m,l,r;
long long qk(long long x,int y){
	long long res=1;
	while(y){
		if(y&1){
			res*=x;
			res%=mod;
		}
		x*=x;x%=mod;
		y>>=1;
	}
	return res;
}
void init(int x){
	pre[0]=1;
	for(int i=1;i<=x;i++){
		pre[i]=pre[i-1]*i%mod;
	}
}
long long C(long long x,long long y){
    if(y>x)return 0;
    return ((pre[x]*qk(pre[y],mod-2))%mod*qk(pre[x-y],mod-2)%mod);
}
long long Lucas(long long x,long long y){
    if(!y)return 1;
    return C(x%mod,y%mod)*Lucas(x/mod,y/mod)%mod;
}
int main(){
	init(mod);
	scanf("%d",&T);
	while(T--){
		scanf("%lld %lld %lld",&n,&l,&r);
		printf("%lld\n",(Lucas(r-l+n+1,r-l+1)-1+mod)%mod);
	}
	
}
posted @ 2021-11-26 21:06  zhi_kong  阅读(119)  评论(0)    收藏  举报