bzoj4403 序列统计
我们很容易知道要求的式为
由公式
化得
lucas定理求得
1 #include<cstdio> 2 using namespace std ; 3 4 const long long MOD = ( long long ) 1e6 + 3 ; 5 const long long MAXN = MOD ; 6 7 long long mypow ( register long long a , register int n ) { 8 register long long ans = 1 ; 9 while ( n ) { 10 if ( n & 1 ) ans = ans * a % MOD ; 11 n >>= 1 ; 12 a = a * a % MOD ; 13 } 14 return ans ; 15 } 16 17 long long p [ MAXN ] ; 18 void get_c () { 19 register long long o = 1 ; 20 long long N = MOD ; 21 p [ 0 ] = 1 ; 22 for ( register int i = 1 ; i < N ; ++ i ) p [ i ] = o = ( o * i % MOD ) ; 23 } 24 25 long long _C ( const int n , const int m ) { 26 if ( n > m ) return 0 ; 27 return p [ m ] * mypow ( p [ n ] , MOD - 2 ) % MOD * mypow ( p [ m - n ] , MOD - 2 ) % MOD ; 28 } 29 30 long long C ( long long n , long long m ) { 31 //printf ( "%lld %lld\n" , n , m ) ; 32 long long ans = 1 ; 33 while ( m ) { 34 ans = ans * _C ( n % MOD , m % MOD ) % MOD ; 35 n /= MOD ; m /= MOD ; 36 } 37 return ans ; 38 } 39 40 void solve () { 41 int n , L , R ; 42 scanf ( "%d%d%d" , & n , & L , & R ) ; 43 printf ( "%lld\n" , ( C ( ( n - 1 ) + 1 , R - L + ( n - 1 ) + 2 ) + ( MOD - 1 ) ) % MOD ) ; 44 } 45 46 int T ; 47 int main () { 48 get_c () ; 49 scanf ( "%d" , & T ) ; 50 while ( T -- ) 51 solve () ; 52 return 0 ; 53 }