冬アルゴリズムベースキャンプ4 J二次元ランニングオフ2020頭の牛

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417

 

I-段階の選択があると仮定して移動しない、ステップ移動niがあります

右へ選択ステップが存在であるという仮定は、ステップがNIAを残し

所以-m <= A-(NIA)<= M

所以(NMI)/ 2 <= A <=分{NI、(N + MI)/ 2}

令G(I)=​​ΣC(NI)(3 ^ A)(2 ^(NIA))

答え=ΣC(N、I)G [i]は

 

再帰はどのようにG [i]を考慮して決定しました

令F(N、M)= C(n、m)は(3 ^ M)(2 ^(NM))

 则3F(N-1、M-1)+ 2F(N-1、M)= F(n、m)は

N = 8、M = 3と仮定

G [0] = F(8,3)+ F(8,4)+ F(8,5)

      = 3F(7,2)+ 5F(7,3)+ 5F(7,4)+ 2F(7,5)

G [1] = F(7,2)+ F(7,3)+ F(7,4)+ F(7,5)

      = 3F(6,1)+ 5F(6,2)+ 5F(6,3)+ 5F(6,4)+ 2F(6,5)

G [2] = F(6,2)+ F(6,3)+ F(6,4)

      = 3F(5,1)+ 5F(5,2)+ 5F(5,3)+ 2F(5,4)

G [3] = F(5,1)+ F(5,2)+ F(5,3)+ F(5,4)

頭尾ことができ、その後、G [i]が5を乗じた、既知のG [i]の場合、発見され、その後実際に係合することができます

 

)の#include <cstdioを> 
する#include <アルゴリズム> 使用して名前空間はstdを、#define N 3000001 のconst int型 MOD = 998244353 
typedefの長い長いLL。INT G [N]。
INT POW2 [N]、pow3 [N]、FAC [N]、INV [N]。INT C(INT nは、INT M)
{ 戻り 1LL * FAC [N] * INV [M]%のMOD * INV [nm]の%MOD。
} int型 F(整数 nは、INT M)
{ 戻り 1LL * C(n、m)は* pow3 [M]%のMOD * POW2 [nm]の%のMOD。
}
 
 
 

 
 
  
 

 

    
 

    
 
INT POW(整数 nは、INTのM)
{ 
    int型 S = 1 (; M; M >> = 1、N = 1LL * N * N%のMOD)
         場合(M 1)S = 1LL * S * N%のMOD。
    リターン秒; 
} 
 
int型のmain()
{ 
    int型N、M。
    scanf関数(" %D%D "、&​​N、&M)。
    POW2 [ 0 ] = 1 ; 
    pow3 [ 0 ] = 1 ; 
    FAC [ 0 ] = 1 ;
    INV [0 ] = 1 ;
    以下のためにINT iが= 1 ; I <N; ++ I)
    { 
        POW2 [I] = POW2 [I- 1 ] * 2%のMOD。
        pow3 [I] = 1LL * pow3 [I- 1 ] * 3%のMOD。
        FAC [i]は = 1LL * FAC [I- 1 ] * I%MOD。
        INV [I] = POW(FAC [i]は、mod- 2 )。
    } 
    int型の L = 0、R = 0、NL、NR、ANS = 1 INT I = N; I> =0 ; - I)
    { 
         NL = MAX(0、NM-I + 1 >> 1 )。
         NR =分(NI、M + NI >> 1 )。
         もし(NL> L)ANS =(ANS-F(NI、L ++)+ MOD)%のMOD。
         一方、(NR> R)ANS =(ANS + F(NI、++ R))%のMOD。
         G [I] = ANS。
         ANS = 5LL * ANS%のmod。
         もし(NL> = 1)ANS =(ANS + 3LL * F(NI、NL- 1)%MOD)%のMOD。
         ANS =(ANS-3LL * F(NI、NR)%MOD + MOD)%のMOD。
    }
    ANS = 0 ;
    以下のためにINT iが= 0 ; I <= N; ++ I)ANS =(ANS + 1LL * C(N、I)* G [I]%のMOD)%のMOD。
    printf(" %dの" 、ANS)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/TheRoadToTheGold/p/12335061.html