リンクします。https://codeforces.com/problemset/problem/1284/C
問題の意味:入りセグメントの定義、最大値-min値= Rにおける区間[L、R]で - L。1-nは、全て入りセグメント%mの数からなる配列を求めます
アイデア:組み合わせ論は結論を押してください。最小値= K、例えば、N = 5、K = 3、入りセグメント123または2でなければならない - 例えば、長さは、セグメントkの最大値のシーケンスをフレームシーク、nは1からなる配列を仮定、入りセグメントkの長さで観察することができる34または345は、必ずしも連続している、彼らは、配列の全体の長さがnとなるように、単一の全体と見なすことができる - K + 1、内部長さがKである、内部タイプの組み合わせこれは、種の全体的な組み合わせは、(N-k + 1)である!Kです!Kのタイプの長フレームセグメントは、(123234345)であるN - K + 1種、長さkフレームセグメント最終的な答えは、(N-K + 1)×(N-k + 1)となるように! * K!、前処理は階乗見ることができます。
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4の#include <アルゴリズム> 5の#include <ベクトル> 6の#include <キュー> 7 使用して 名前空間をSTD。 8 typedefの長い 長いLL。 9 CONST INT MAXN = 2E5 + 5E4 + 5 。 10 LL FAC [MAXN]。 11 INT メイン(){ 12 LL N、M。 13 CIN >> N >> M。 14 FAC [ 1 ] = 1 。 15 以下のために(INT iが= 2 ; I <= N; I ++ ){ 16 FAC [i]は=(FAC [I- 1 ] * I)%のM。 17 } 18 LL ANS = 0 。 19 のために(INT iは= 1 ; <I = N I ++ ){ 20 ANS + =((N + 1 -i)*(FAC [i])と%のM)*(FAC [N + 1 -i])%M。 21 ANS = ANS%M。 22 } 23 // 1 2 3 24 COUT << ANS%M。 25 リターン 0; 26 }