插一块板表示让这个数字+1,问题转化为对于长度为1~n的序列,插入r-l块板(首尾也可以插板,每个点板数不限),有多少种方案,即求$\sum_{i=1}^{n}c(r-l+i,r-l)$
考虑该式,再补上一项c(r-l+1,r-l+1),原式=$\sum_{I=1}^{n}c(r-l+i,r-l)+c(r-l+1,r-l+1)-1=\sum_{I=2}^{n}c(r-l+i,r-l)+c(r-l+2,r-l+1)-1=……=c(r-l+n+1,r-l+1)-1$,用Lucas计算即可

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define mod 1000003 4 int t,n,l,r,fac[mod],inv[mod]; 5 int c(int n,int m){ 6 if (n<m)return 0; 7 return 1LL*fac[n]*inv[m]%mod*inv[n-m]%mod; 8 } 9 int main(){ 10 scanf("%d",&t); 11 fac[0]=inv[0]=inv[1]=1; 12 for(int i=1;i<mod;i++)fac[i]=1LL*fac[i-1]*i%mod; 13 for(int i=2;i<mod;i++)inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod; 14 for(int i=2;i<mod;i++)inv[i]=1LL*inv[i-1]*inv[i]%mod; 15 while (t--){ 16 scanf("%d%d%d",&n,&l,&r); 17 l=r-l+1; 18 printf("%lld\n",(1LL*c((n+l)/mod,l/mod)*c((n+l)%mod,l%mod)+mod-1)%mod); 19 } 20 }