序列统计,将答案转化,然后就是Lucas的模板题,用费马小定理瞎搞。
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 8 const int maxn=1e6+3,mod=1e6+3; 9 10 long long fac[maxn]; 11 long long qpow(long long a,long long b) 12 { 13 long long ans=1; 14 a%=mod; 15 for(long long i=b;i;i>>=1,a=a*a%mod) 16 if(i&1)ans=ans*a%mod; 17 return ans; 18 } 19 long long C(long long n,long long m) 20 { 21 if(m>n||m<0)return 0; 22 long long s1=fac[n],s2=fac[n-m]*fac[m]%mod; 23 return s1*qpow(s2,mod-2)%mod;//费马小定理 24 } 25 long long lucas(long long n,long long m) 26 { 27 long long res=1; 28 while(n||m) 29 { 30 res=res*C(n%mod,m%mod)%mod;//Lucas定理 31 n/=mod,m/=mod; 32 } 33 return res; 34 } 35 int main() 36 { 37 fac[0]=1; 38 for(int i=1;i<maxn;i++) 39 fac[i]=fac[i-1]*i%mod; 40 int cas; 41 scanf("%d",&cas); 42 while(cas--) 43 { 44 int x,y,z; 45 scanf("%d%d%d",&x,&y,&z); 46 y=z-y+1; 47 printf("%lld\n",(lucas(x+y,y)-1+mod)%mod); 48 } 49 }
时间: 2024-10-11 23:40:03