問題の説明
ある日、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 よりよく理解するために。
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。
それぞれの場合は、一つの整数を含む行から始まる N (1 ≤ N ≤ 3000 )。
の和が保証される N、すべてのテストケースでSはより大きくない 5 × 10 4。
出力
各テストケースのために、出力1行の答えを表す整数を含みます。
サンプル入力
1 2 3
サンプル出力
0 332748118 554580197
ソース
推薦します
式の導出(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(9、998244351))%998244353 。 printf(" %LLDする\ n " 、ANS)。 } リターン 0 ; }