codeforces 1284C。正月と順列(組合せ論)

リンクします。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 }

おすすめ

転載: www.cnblogs.com/AaronChang/p/12185455.html