【HDOJ6595】すべては等しい確率で生成された(期望DP)

問題の意味:ランダムNから生成されたN、[1、N]が与えられます

その後、nはランダムに生成された数の完全な置換は、逆蓄積及びANSの数の数nを求め、

998 244 353このことは、次にランダム配列の完全な配列を取り出し、このプロセスが空になるまで繰り返され、ANS所望下型を見つけます

考える:手だけプッシュ式に長さに関連する期待

私は一般的な用語の式があることを聞きました

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3 typedefの長い 長いLL。
4符号なしのtypedef int型 のuint ;
5 typedefの符号なしの長い 長いULL。
6のtypedef対< INTINT > PII。
7のtypedef対<-1,11,11-> PLL。
8 typedefのベクトル< int型 > VI。
9  の#define N 110000
 10  の#define M 1100000
 11  の#defineFiの第
 12  の#define SE第
 13  の#define MPがmake_pair
 14件 の#define PIのACOS(-1)
 15  の#define MEM(A、B)のmemset(A、B、はsizeof(A))
 16  の#define(REPをI、 B)は(INT I =(INT); iが<=(INT)B; I ++)
 17  の#defineあたり(iは、b)のための式(I =(INT INT); iが> =(INT)B ; i--)
 18  の#define lowbit(x)は、x&( - X)
 19  の#defineランド(RAND()*(1 << 16)+ランド())
 20  の#define ID(X)((X)<= B(X):MN /(X)+1)
 21  の#define LS P << 1
 22  の#define RS P << 1 | 1
 23  
24  CONSTLL MOD = 998244353、INV2 =(MOD + 1)/ 2 25        二重 EPS = 1E- 6 26        LL INF = 1E14。
27  
28  LLのFAC [N]、INV [N]、DP [N]、MI [N]。
29  
30  LL PW(LLのX、LLのY)
 31  {
 32      のLL T = 1 33      一方、(Y)
 34      {
 35          であれば(Y&1)T = T * X%MOD。
36          X = X * X%MOD。
37          Y >> = 1 38      }
39      リターントン。
40  }
 41  
42  int型リード()
 43  {
 44     のint = V 0、F = 1 45     チャー C = GETCHAR()。
46     一方、(C < 48 || 57 <C){ もし、(C == ' - ')、F = - 1C = GETCHAR();}
 47     ながら48 <= C && C <= 57)V =(V << 3)+ V + V + C- 48、C = GETCHAR()。
48     リターンV * F;
49  }
 50  
51  LL計算値(LLのN)
 52  {
 53      のLL T = N *(N- 1)/ 2 54      リターン T *のINV2%のMOD。
55  }
 56  
57  のLL C(LL N、LLのM)
 58  {
 59      であれば(N <M || M < 0戻り 0 ;
60      のLL T = FAC [N] * INV [M]%MOD * INV [nm]の%MOD。
61      リターンT。
62  }
 63  
64  のint main()の
 65  {
 66     // freopenは( "1.in"、 "R"、STDIN)。
67      // freopenは( "1.out"、 "W"、STDOUT); 
68      INT N。
69      FAC [ 0 ] = 1 70      担当者(I、13000)FAC [i]は= FAC [I- 1 ] * I%MOD。
71の      INV [ 0 ] =装置INVは、[ 1 ] = 1 72      担当者(I、23000)INV [I] =装置INV [MODの%I] *(MOD-MOD / I)%MOD。
73      担当者(I、13000)INV [I] = INVを[I- 1 ] * INV [I]%モッド;
74      マイル[ 0 ] = 1 75      担当者(I、13000)MI [I] = MI [I- 1 ] * INV2%MOD。
76      担当者(I、13000 77      {
 78          のLL T = 0 79          担当者(J、1、I- 1)T =(T + DP [J] * C(i、j)の%MOD * MI [I]%MOD)%MOD。
80          DP [I] =(計算値(I)+ T)%MOD * PW(1LL-MI [I] + MOD、MOD- 2)%MOD。
81      }
 82      担当者(I、13000)DP [I] =(DP [I] + DP [I- 1 ])%MOD。
83の      INV [ 0 ] =装置INVは、[ 1 ] = 1 84      担当者(I、23000)INV [I] =装置INV [MODの%I] *(MOD-MOD / I)%MOD。
85      一方(scanf関数(" %のD "、&​​N)=!EOF)
 86      {
 87          のprintf(" %I64dの\ n "、DP [N] * INV [N]%MOD)。
88      }
 89      リターン 0 90 }

 

おすすめ

転載: www.cnblogs.com/myx12345/p/11584100.html