1 の#define HAVE_STRUCT_TIMESPEC 2の#include <ビット/ STDC ++ H> 3 使用して 名前空間STDを、 4 CONST INT N = 5E5 + 7 。 5 CONST 長い 長 MOD = 1E9 + 7 。 6 長い 長いFAC [N]、INV [N]。 7 長い 長い qpow(長い 長い、長い 長いB){ 8 長い 長い ANS = 1 。 9 一方、(B){ 10 であれば(B&1 ) 11の ANS = * ANS%MOD。 12 B >> = 1 。 13 A = A *%のMOD。 14 } 15 リターンANS。 16 } 17 空隙P(){ 18 FAC [ 0 ] = 1 ; 19 のために(INT iは= 1 ; I <N I ++ ) 20 FAC [i]は= FAC [I- 1 ] * I%のMOD。 21 INV [N- 1 ] = qpow(FAC [N- 1 ]、mod- 2 )。 22 のために(INT I = N- 2 ; I> = 0 ; i-- ) 23 INV [I] = INV [I + 1 ] *(I + 1)%のMOD。 24 } 25 長い 長い C(INT A、int型B){ 26 リターン FAC [A] * INV [B]%のMOD * INV [AB]%MOD。 27 } 28 INT N、K。 29 INT メイン(){ 30の IOS :: sync_with_stdio(偽)。 31 cin.tie(NULL)。 32 cout.tie(NULL)。 33は、 P(); 34れる CIN N >> K; 35 IF(K> = N)// kは> = N、次に、すべて1を移動させ、nは同じカセット内にN個の同一のボールに対応することができる場合、ボックスが空でもよいです。 36 COUT << C(N + N- 1、N- 1。); // n及びnはボックスボール総空隙2N-1、Nのギャップにボックス、即ちC(2N-1 、N-)= C(2N-1 ,. 1-N-)。 37 [ 他{ 38は ロング ロング TOT = C(2 * N- 1、N- 1。); 39 用(INT I = 1 ; I <NK; I ++){ // NK撥の容量不足を減算少なくとも1のNK位置は、少なくとも1つの位置である 40 tot- 1LL = C *(N、I)* C(N- 1、I- 1)MODの%; // N Iボールボックスに、各ボックスが空でない 41 // N Iボックスを選択するボックスを起動し、その後、n個のボールの間にNが存在しますボイド-1、I-1〜N-1のギャップにバッフル、N Iの部分にボールであることができるが空でないと、すべての 42である TOT = + MOD; 43である TOTの%= MOD。 44は } 45 COUT << << TOT ' \ N- ' ; 46である } 47 リターン 0 ; 48 }