初心者コンテスト156E(分割方法、組合せ論)Atcoder

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 }

 

おすすめ

転載: www.cnblogs.com/ldudxy/p/12363949.html