トピックリンク: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?0:1 ;} 使用して 名前空間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- 2、1)%MOD * quickmod(2、N- 3)%のMOD << ENDL。 リターン 0 ; }