図BZOJ値(NTT、第二種のスターリング数)

説明

「単純な無向グラフ」図(必ずしも通信に)非環を含まない、非エッジ重みを指します。
図値は、各点kと度の電源を参照して定義されました。
所与のn及びk、くださいすべての基準点との単純な計算と図の和のn値。
998244353モジュロ出力の偉大な答えは、ので。

入力

最初の行は2つの正の整数N、K(1 <= N <= 10 ^ 9,1 <= K <= 200000)を含有します。

出力

 出力線整数、モジュロ998 244 353の結果に、すなわち解答。

サンプル入力

6 5

サンプル出力

67584000
#include <ビット/ STDC ++ H>
 に#define MS(X)のmemset(X、0、はsizeof(X))
 の#define SWS IOS :: sync_with_stdio(false)を
 使用して、 名前空間STD。
typedefの長い 長いLL。
const  int型 MAXN = 4E6 + 5 constの ダブル PI = ACOS( - 1.0 )。
constの LL MOD = 998244353 ; /// 通常情况下的模数、
CONSTのLL G = 3/// 模数的原根998244353,1004535809,469762049 

LL qpow {(LL N、LLのP LL)
    LL ANS = 1 同時に(N){
         場合(N - 1)ANS = ANS *%のP。
        N >> = 1 = A *%のP; 
    } 
    戻りANS。
} 
int型REV [MAXN]。
ボイド NTT(LL []、int型 nは、INT LEN、int型PD){ 
    REV [ 0 ] = 0 ;
    int型 i = 1 ; iがN <; Iは++ ){ 
        REV [I] =(REV [I >> 1 ] >> 1 |((I&1)<<(len- 1)));
         IF(Iは< 改訂[I])スワップ(A [I]、A [改訂[I]); 
    } 
    のためのINT MID = 1 MID <N-; MID = << 1 ){ 
        のLL Wnを qpow =(G、(mod- 1)/(MID * 2)、MOD); /// 原始根の根部の代わりに
        IF(PD == - 1)qpowの= Wnを(mod-のWnは2、MOD); / //は逆の逆要素に変換
        するためのINT J = 0 ; J <N- = J + 2 * {MID)
            LL W = 1 ;
             のためのINT K = 0; K <中間あり、k ++ ){ 
                LLのX = [J + k]は、yは* W = [J + K +中間]%MOD。
                [J + K] =(X + Y)%MOD。
                [J + K +中間] =(X-Y + MOD)%MOD。
                W = W * WN%MOD。
            } 
        } 
    } 
    もし(PDの== - 1 ){ 
        LL INV = qpow(N、mod- 2 、MOD)。
        以下のためにint型 i = 0 ; iがn <; iは++ ){ 
            [i]は = [I] * INV%MOD。

        } 
    } 
} 
[MAXN]、B [MAXN] LL、[MAXN] C。
ボイド解く(int型のn、int型M){
     int型 LEN = 0、最大= 1 一方、(アップ<= N + M)まで<< = 1、lenの++ 
    NTT(アップ、LEN、1 )。
    NTT(B、アップ、LEN、1 )。
    以下のためにint型 i = 0 ; iが最大<; I ++)はCを[I] = 1LL * [I] * B [i]は%MOD。
    NTT(最大C、LEN、 - 1 )。
} 
LL FA [MAXN]。
LL SUF [MAXN]。
INT {main()の
    LL N、K。
    SWS; 
    CIN >> N >> K。
    FA [0 ] = 1 ;
    (LL i = 0 ; iは= Kを<Iは++ ){
         int型、T = 1 もし(!I = 0)FA [I] = FA [I- 1 ] * I%MOD。
        もし(I&1)T = - 1 
        [I] =のT *のqpow(FA [i]は、mod- 2、MOD)%MOD。
        [I] =([I] + MOD)%MOD。
        B [i]は = qpow(I、K、MOD)* qpow(FA [i]は、mod- 2、MOD)%MOD。
    } 
    (k、k)を解きます。
    LL ANS = 0 
    アップLL =分(K、N- 1 )。
    LL SUF = 1 以下のためにint型 i = 0 ; iが<=最大、iは++ ){ 
        ANS =(ANS + SUFの* cを[I]%のMOD * qpow(2、N- 1 -i、MOD)%のMOD)%MOD。
        SUF = SUF×(N- 1 -i)%MOD。
    } 
    ANS = ANS * qpow(2、(N- 1)*(N- 2)/ 2、MOD)%MOD * N%のMOD。
    coutの << ANS << てendl; 

}

 

おすすめ

転載: www.cnblogs.com/azznaz/p/11525155.html