2 - すべては等しい確率で生成されHDU-マルチ補正(式+逆)

問題の説明
ある日、Y_UMEは整数だ  N  と以下のようになり、興味深いプログラムを:



Y_UMEは、このプログラムで遊びたいです。まず、彼はランダム整数生成  N [ 1 N ]  に等しい確率です。そして彼は、ランダムに、長さの順列生成  nは  等しい確率で。その後、彼は、パラメータとして、この順列と面白いプログラム(関数計算を())を実行してから戻って値を取得します。出力にこの値を法の期待下さい  998244353を

長さの順列  N  長さの配列であり、  nは  整数のみからなる  [ 1 N ]  異なるペアワイズです。

順列で反転ペア  Pは  インデックスの組である  I J  ように  I > J  及び  pはiが< p個のJを例えば、順列  [ 4 1 3 2 ]  含有する  4つの  反転:  2 1 3 1 4 1 4 3

数学では、部分は、残りの要素の順序を変更することなく、いくつかまたは全く要素を削除することにより、別の配列に由来することができる配列です。空のサブシーケンスは、元のシーケンスのサブシーケンスであることに注意してください。

参照してください https://en.wikipedia.org/wiki/Subsequence よりよく理解するために。
 

 

入力
複数のテストケースがあります。

それぞれの場合は、一つの整数を含む行から始まる  N 1 N 3000

の和が保証される  N、すべてのテストケースでSはより大きくない  5 × 10 4
 

 

出力
各テストケースのために、出力1行の答えを表す整数を含みます。
 

 

サンプル入力
1 2 3
 

 

サンプル出力
0 332748118 554580197
 

 

ソース
 

 

推薦します
liuyiding | 我々は慎重にあなたのためのいくつかの同様の問題を選択している:   6602   6601   6600   6599   6598 
 
式の導出(N * N-1/9)%998244353
逆需要関数のように下に置きます
コード:
#include <cstdioを> 
する#include <iostreamの> 
する#include <CStringの> 
する#include <アルゴリズム> 
の#include <キュー> 
の#include <スタック> 
の#include < セット > 
の#include <ベクトル> 
の#include <地図> 
の#include <cmath>
 const  int型 MAXN = 1E5 + 5 
typedefの長い 長いLL。
使用して 名前空間はstdを、

LLのKSM(LLのX、LLのY)
{ 
  LL ANS = 1 一方、(Y)
  { 
      場合(Y&1 
      { 
          ANS =(ANS * X)%の998244353 
    } 
    Y >> = 1 
    X =(X * X)%998244353 
  } 
  
  戻りANS。
} 
int型のmain()
{ 
   LL N。
   一方、(〜のscanf(" %のLLD "、&N))
   { 
       
       LL ANS =((N * N- 1)* KSM(9998244351))%998244353 
       printf(" %LLDする\ n " 、ANS)。
       
   }
   リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/Staceyacm/p/11240725.html