Description
给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对10^6+3取模的结果。
Input
Output
输出包含T行,每行有一个数字,表示你所求出的答案对10^6+3取模的结果。
Sample Input
1 4 5
2 4 5
Sample Output
5
//【样例说明】满足条件的2个序列为[4]和[5]。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int Mod=1000003; 7 long long B[1000005],A[1000005]; 8 long long ans; 9 int n,l,r; 10 long long Lucas(int x,int y) 11 { 12 if (x==0) return 1; 13 int xx=x%Mod,yy=y%Mod; 14 if (xx>yy) return 0; 15 long long S=((B[yy]*A[xx])%Mod)*A[yy-xx]%Mod; 16 return (S*Lucas(x/Mod,y/Mod))%Mod; 17 } 18 int main() 19 {int T,i; 20 cin>>T; 21 A[1]=1;A[0]=1;B[0]=1; 22 for (i=2;i<=1000003;i++) 23 A[i]=((Mod-Mod/i)*A[Mod%i])%Mod; 24 for (i=1;i<=1000003;i++) 25 { 26 A[i]=(A[i]*A[i-1])%Mod; 27 B[i]=(B[i-1]*i)%Mod; 28 } 29 while (T--) 30 { 31 cin>>n>>l>>r; 32 ans=Lucas(r-l+1,r-l+n+1); 33 cout<<(ans-1+Mod)%Mod<<endl; 34 } 35 }