A - Random Descents

Time Limit: 2 sec / Memory Limit: 1024 MiB

配点 : 300

問題文

長さ N の正整数列 A=(A_1,A_2,\cdots,A_N) が与えられます. 以降,S=\sum_{1 \leq i \leq N} A_i とおきます.

長さ S の整数列 x は以下の条件をすべて満たすとき(そしてそのときのみ)good であると言います.

  • x の各要素は 1 以上 N 以下
  • 各整数 i (1 \leq i \leq N) について,x はちょうど A_i 個の i を含む

整数列 x=(x_1,x_2,\cdots,x_S) に対し,x_i>x_{i+1} を満たす index i の個数を f(x) と表すことにします.

good な整数列 x を一様ランダムにとるときの f(x) の期待値を \pmod{998244353} で求めてください.

期待値 \pmod{998244353} の定義

求める期待値は必ず有理数になることが証明できます. また,この問題の制約のもとでは,その値を既約分数 \frac{P}{Q} で表した時,Q \neq 0 \pmod{998244353} となることも証明できます. よって,R \times Q \equiv P \pmod{998244353}, 0 \leq R < 998244353 を満たす整数 R が一意に定まります. この R を答えてください.

制約

  • 2 \leq N \leq 250000
  • 1 \leq A_i
  • \sum_{1 \leq i \leq N} A_i < 998244353
  • 入力される値はすべて整数

入力

入力は以下の形式で標準入力から与えられる.

N
A_1 A_2 \cdots A_N

出力

答えを出力せよ.


入力例 1

2
1 2

出力例 1

665496236

good な x は以下の 3 通りです.

  • x=(1,2,2): f(x)=0
  • x=(2,1,2): f(x)=1
  • x=(2,2,1): f(x)=1

よって f(x) の期待値は 2/3 です.


入力例 2

5
1 1 1 1 1

出力例 2

2

入力例 3

2
2024 824

出力例 3

841217737

入力例 4

10
19237224 3435339 227368010 836006 153314679 115537801 189694444 76016030 159566203 53238564

出力例 4

873203747
B - Erase Multiples

Time Limit: 2 sec / Memory Limit: 1024 MiB

配点 : 700

問題文

整数 N が与えられます.

集合 SS=\{1,2,\cdots,N\} で初期化します. その後,S が空になるまで次の操作を繰り返します.

  • S の要素を一様ランダムに 1 つ選び,それを v とおく. S から v の倍数をすべて削除する.

操作回数の期待値を \pmod{998244353} で求めてください.

期待値 \pmod{998244353} の定義

求める期待値は必ず有理数になることが証明できます. また,この問題の制約のもとでは,その値を既約分数 \frac{P}{Q} で表した時,Q \neq 0 \pmod{998244353} となることも証明できます. よって,R \times Q \equiv P \pmod{998244353}, 0 \leq R < 998244353 を満たす整数 R が一意に定まります. この R を答えてください.

制約

  • 1 \leq N \leq 10^{10}
  • 入力される値はすべて整数

入力

入力は以下の形式で標準入力から与えられる.

N

出力

答えを出力せよ.


入力例 1

2

出力例 1

499122178

操作回数の期待値は 3/2 です.


入力例 2

6

出力例 2

582309209

入力例 3

23

出力例 3

515759591

入力例 4

5000000000

出力例 4

64399530
C - Subsequence Reversal

Time Limit: 5 sec / Memory Limit: 1024 MiB

配点 : 900

問題文

長さ N の整数列 A=(A_1,A_2,\cdots,A_N) と整数 K が与えられます.

あなたは A のコピーを K 個並べて連結し,長さ NK の整数列 x=(x_1,x_2,\cdots,x_{NK}) を得ました.

あなたはこれから次の操作をちょうど 1 回行います.

  • x の(連続とは限らない)(空でもよい)部分列を選び,その要素を逆順に並べ替える. より正確に述べれば,index の列 1 \leq i_1<i_2<\cdots<i_s \leq NK (列の長さ s も任意) を選び,各 1 \leq j \leq s に対して x_{i_j} の値を x_{i_{s-j+1}} で置き換える. この置き換えはすべて同時に行われる.

操作後の x としてありうる数列の個数を 998244353 で割ったあまりを求めてください.

制約

  • 1 \leq N \leq 300
  • 1 \leq K \leq 10^{18}
  • 1 \leq A_i \leq N
  • 入力される値はすべて整数

入力

入力は以下の形式で標準入力から与えられる.

N K
A_1 A_2 \cdots A_N

出力

答えを出力せよ.


入力例 1

2 2
1 2

出力例 1

6

この例では,x=(1,2,1,2) です. 操作後の x としてあり得る数列は以下の 6 通りです.

  • (1,2,1,2) : s=1, (i_1)=(1) とすればよい.
  • (2,1,1,2) : s=2, (i_1,i_2)=(1,2) とすればよい.
  • (1,1,2,2) : s=2, (i_1,i_2)=(2,3) とすればよい.
  • (1,2,2,1) : s=2, (i_1,i_2)=(3,4) とすればよい.
  • (2,2,1,1) : s=2, (i_1,i_2)=(1,4) とすればよい.
  • (2,1,2,1) : s=4, (i_1,i_2,i_3,i_4)=(1,2,3,4) とすればよい.

入力例 2

3 2
3 3 3

出力例 2

1

入力例 3

5 3
1 2 3 4 5

出力例 3

9216

入力例 4

30 1000000000000
8 3 8 10 1 5 3 1 6 4 3 6 2 6 6 9 5 5 8 3 3 4 10 2 3 2 8 10 8 1

出力例 4

401626004
D - Max of Sum of Prefix Min

Time Limit: 6 sec / Memory Limit: 1024 MiB

配点 : 900

問題文

数列 a=(a_1,a_2,\cdots,a_k) に対し,f(a) を以下のように定めます.

  • f(a)=\sum_{1 \leq i \leq k} \min(a_1,a_2,\cdots,a_i)

長さ N の整数列 A=(A_1,A_2,\cdots,A_N) が与えられます.

整数列 A2 つの(連続とは限らない)(空でもよい)部分列に分解し,それらを X_1,X_2 とおきます. 分解の際,A の各要素がちょうど 1 つの部分列に含まれるようにします. f(X_1)+f(X_2) としてありうる最大値を求めてください.

制約

  • 1 \leq N \leq 500000
  • 1 \leq A_i \leq 10^9
  • 入力される値はすべて整数

入力

入力は以下の形式で標準入力から与えられる.

N
A_1 A_2 \cdots A_N

出力

答えを出力せよ.


入力例 1

6
5 3 6 1 4 7

出力例 1

23

例えば,X_1=(5,3,1),X_2=(6,4,7) と分解すると,f(X_1)+f(X_2)=9+14=23 になります. 23 より大きい値は達成できないため,これが答えです.


入力例 2

10
22 7 20 26 1 11 7 1 15 10

出力例 2

104

入力例 3

15
140039457 164832983 239276621 245532751 274195604 320064892 499774361 419370025 249168130 521915711 744280520 561032101 857077284 543856068 910500852

出力例 3

4618736183

入力例 4

20
596982638 713892371 987307025 722757772 759622047 853214705 628902494 623807668 755031424 486834509 272961036 423817262 434140395 284114341 88860862 222135106 69837030 210989591 225447688 86416231

出力例 4

9047041486
E - Tree and Back Edges

Time Limit: 4 sec / Memory Limit: 1024 MiB

配点 : 1000

問題文

1 から N までの番号のついた N 頂点からなる根付き木 T があります. 根は頂点 1 で,頂点 i (2 \leq i \leq N) の親は頂点 P_i (P_i<i) です. この木の辺は有向辺で,各辺は親から子の方向へ向いています.

あなたは TM 本の辺を追加し,有向グラフ G を作りました. i 番目に追加した辺は,頂点 A_i から頂点 B_i へ向かう辺でした. ここで,A_i,B_i は以下の条件を満たすことが保証されます.

  • 1 \leq B_i<A_i \leq N
  • T において頂点 A_i は頂点 B_i の子孫である
  • T において頂点 A_i は葉でない

なお,同じ辺を複数本追加することもありえます.

あなたはこれから G の頂点 1 からスタートし,停止するまで次の操作を繰り返します.

  • 今いる頂点から出る辺が存在しないなら停止する.
  • 今いる頂点から出る辺が存在するなら,そのうちの 1 つを一様ランダムに選び,その辺が向かう頂点へ移動する.

停止するまでに移動する回数の期待値を\pmod{P} で求めてください.

ただしこの問題では P の値は入力で与えられません. そのかわり,以下の制約をすべて満たすような P をあなたが選び,その P に対して問題を解いてください.

  • P は素数
  • 998244353 \leq P < 2 \times 10^9
  • \pmod{P} で答えが定義できる
期待値 \pmod{P} の定義

求める期待値は必ず有理数になることが証明できます. その値を既約分数 \frac{P}{Q} で表した時,Q \neq 0 \pmod{P} となっていればこの値は\pmod{P} で定義できると言い,Q = 0 \pmod{P} ならば定義できないと言います.値が定義できる場合,R \times Q \equiv P \pmod{P}, 0 \leq R < P を満たす整数 R が一意に定まります. この R を答えてください.

この問題のジャッジについて

ジャッジはまず,あなたの選んだ P が最初の 2 つの条件を満たすかどうかチェックします. 条件を満たさない場合は,そのテストケースは不正解と判定します. 条件を満たす場合,ジャッジはこの P に対して問題を解くプログラムを実行します. ジャッジが答え\pmod{P} の値を計算できる場合,それをあなたの出力と比較して正誤判定を行います. ジャッジが答え\pmod{P} を計算できないが, 答えが\pmod{P} で定義できないと判断できる場合,そのテストケースは不正解と判定します. ジャッジが答え\pmod{P} を計算できず,かつ 答えが\pmod{P} で定義できるか否かが判断できない場合は,そのテストケースは正解と判定します. なお,この問題の制約下で,最初の 2 つの条件を満たす P のうち 99.9% 以上で期待値が定義でき,かつジャッジがそれを正しく計算できることが証明できます.

制約

  • 2 \leq N \leq 250000
  • 0 \leq M \leq 250000
  • 1 \leq P_i < i
  • 1 \leq B_i<A_i \leq N
  • T において頂点 A_i は頂点 B_i の子孫である
  • T において頂点 A_i は葉でない
  • 入力される値はすべて整数
  • サンプル以外のテストケースは 50 個以下である.

入力

入力は以下の形式で標準入力から与えられる.

N M
P_2 P_3 \cdots P_N
A_1 B_1
A_2 B_2
\vdots
A_M B_M

出力

答えを以下の形式で出力せよ.

ans P

ここで P はあなたが選んだ素数であり,ans\pmod{P} での答えである.


入力例 1

3 0
1 2

出力例 1

2 998244353

入力例 2

3 1
1 2
2 1

出力例 2

4 998244353

入力例 3

7 5
1 2 2 4 4 3
3 1
2 1
3 2
4 2
3 2

出力例 3

453747441 998244353

入力例 4

20 25
1 2 3 2 5 2 6 1 9 2 2 12 13 1 2 16 17 16 19
13 12
12 1
17 1
6 5
5 1
13 12
12 2
17 16
17 16
17 16
19 16
6 5
16 2
6 5
9 1
9 1
13 12
13 12
6 5
19 16
6 5
17 16
6 5
13 1
13 12

出力例 4

529789893 998244353
F - Max of Sum of Reachable Min

Time Limit: 4 sec / Memory Limit: 1024 MiB

配点 : 1200

問題文

1 から N までの番号がついた N 頂点からなる DAG が与えられます. 辺は M 本あり,i 番目の辺は頂点 U_i から頂点 V_i に向かう辺です. ここで,U_i<V_i が保証されます. 各頂点には整数が書かれており,頂点 i には整数 A_i が書かれています.

頂点の部分集合 s に対し,f(s) を以下のように定めます.

  • f(s)=\sum_{v \in s} \min\{A_u\ |\ u \in s かつ DAG において頂点 u から頂点 v へ移動できる \}

各整数 K=1,2,\cdots,N について,以下の問題に答えてください.

頂点集合 \{1,2,\cdots,N\}K 個の (空でもよい) 部分集合に分解し,それらを X_1,X_2,\cdots,X_K とおきます. 分解の際,各頂点がちょうど 1 つの部分集合に含まれるようにします. \sum_{1 \leq i \leq K}f(X_i) としてありうる最大値を求めてください.

制約

  • 1 \leq N \leq 80
  • 0 \leq M \leq 160
  • 1 \leq A_i \leq 80
  • 1 \leq U_i < V_i \leq N
  • (U_i,V_i) \neq (U_j,V_j) (i \neq j)
  • 入力される値はすべて整数

入力

入力は以下の形式で標準入力から与えられる.

N M
A_1 A_2 \cdots A_N
U_1 V_1
U_2 V_2
\vdots
U_M V_M

出力

K=1,2,\cdots,N に対する答えをこの順に出力せよ.


入力例 1

4 4
1 2 3 4
1 2
1 3
2 4
3 4

出力例 1

4 8 10 10

K に対する最適解(の一例)は以下のとおりです.

  • K=1 : X_1=\{1,2,3,4\}
  • K=2 : X_1=\{1\},X_2=\{2,3,4\}
  • K=3 : X_1=\{1\},X_2=\{2,3\},X_3=\{4\}
  • K=4 : X_1=\{1\},X_2=\{2\},X_3=\{3\},X_4=\{4\}

入力例 2

10 9
22 7 20 26 1 11 7 1 15 10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10

出力例 2

49 104 120 120 120 120 120 120 120 120

入力例 3

15 13
20 12 14 20 22 20 26 34 40 42 44 60 45 69 73
1 14
2 5
2 8
2 9
2 12
2 15
4 7
6 12
7 9
8 15
10 15
11 12
13 14

出力例 3

317 513 541 541 541 541 541 541 541 541 541 541 541 541 541

入力例 4

20 31
54 12 12 26 7 6 38 51 29 52 70 49 67 65 80 67 54 77 74 73
1 2
2 3
3 4
1 5
2 6
5 6
3 7
6 7
4 8
7 8
5 9
6 10
9 10
7 11
10 11
8 12
11 12
9 13
10 14
13 14
11 15
14 15
12 16
15 16
13 17
14 18
17 18
15 19
18 19
16 20
19 20

出力例 4

190 749 872 935 961 963 963 963 963 963 963 963 963 963 963 963 963 963 963 963