配列をカウントCF1312D

トピックリンク:https://codeforces.com/contest/1312

 

効果の件名:

 

 

アイデア:

まず、C(M、N-1)であるに数m N-1の数を取らなければなりません

このN-1、次いでピークの位置を取ることは確かであるの最大数は、我々は、すなわち内部反復の数を見つけるだろう、C N-2個数(N-2,1)

我々は残りのn-3数のため、フォームのXYXを決定することができる知られている2つの反復の最大数、我々は直接左右Yの両方のケースを考えるYそれはすなわち、2 ^(N-3)

 

したがって、最終的な答えC(M、N-1)* C(N-2,1)* 2 ^(N-3)

#pragma GCCの最適化(3、 "Ofast"、 "インライン")// O3优化
の#pragma GCC最適化(2)// O2优化
の#include <アルゴリズム> 
の#include < ストリング > 
の#include < 文字列・H> 
する#include <ベクトル> 
の#include <マップ> 
書式#include <スタック> 
の#include < 設定 > 
書式#include <キュー> 
書式#include <math.h>の
書式#include <cstdioを> 
する#include <iomanip> 
書式#include <TIME.H>
書式#include <ビットセット> 
の#include<cmath> 
の#include <sstream提供> 
の#include <iostreamの> 
する#include <CStringの> に#define LL長い長
 の#define LS NOD << 1個
 の#define RS(NOD << 1)+1
 の#define PII対<整数、整数>
 #define MP make_pair
 の#define PB一back
 の#define INF 0x3f3f3f3f
 の#define MAX(A、B)(> B:B)
 の#define分(A、B)(<B:B)CONST ダブル EPS = 1E- 10 const int型 MAXN = 2E5 + 10 constの LL MOD = 998244353 ;



  

int型はsgn(ダブル A){ 返す <-epsを?- 1:<EPS?01 ;}
 使用して 名前空間STDを、

LL DA [MAXN]。// G ++長い長い
、ボイドのinit()
{ 
    int型I; 
    DA [ 0 ] = 1 ; 
    DA [ 1 ] = 1 以下のための(iは= 2 ; I <MAXN I ++ 
        DA [I] = I * DA [I- 1 ]%のMOD。
} 
LL quickmod(LL A、LL b)は
{ 
    LL ANS= 1 ;
    一方、(b)は、
    { 
        もし、(B&1 
        { 
            ANS =(ANS *)%のMOD。
            B - ; 
        } 
        B / = 2 =((%のMOD)*(%のMOD))%のMOD。
    } 
    戻りANS。
} 
LL C(LL A、LL b)は
{ 
    リターン(DA [A]%のMOD)*(quickmod(DA [B] * DA [AB]%MOD、mod- 2))%のMOD。
} 

int型のmain(){ 
    INIT()。
    LL N、M。
    CIN >> N >>メートル;
    もし(N <= 2 ){ 
        COUT << 0 << ENDL。
        リターン 0 ; 
    } 
    COUT << C(M、N- 1)* C(N- 21)%MOD * quickmod(2、N- 3)%のMOD << ENDL。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/-Ackerman/p/12516732.html