A - Row of Tents

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

UT 大学にはテント列というサークル紹介イベントがあります。長さ L の道があり、 umg くんは位置 0 から位置 L まで一方通行で歩きます。 umg くんには気力というパラメータがあり、その初期値を T とします。ここで、T は整数値とします。 umg くんは、距離 1 歩くごとに、気力が T 未満である場合は 気力が 1 回復します。気力が T である場合は回復しません。

道上には N 個のテントがあり、i 番目のテントは位置 X_i にあります。 umg くんは i 番目のテントに着くとサークル勧誘にあい、気力が A_i 減少します。もしここで気力が 0 未満になると、 umg くんはその場で倒れてしまいます。

umg くんが途中で倒れずに位置 L までたどり着くのに必要な、気力の初期値 T の最小値を求めてください。

制約

  • 入力は全て整数である。
  • 1 \leq N \leq 2\times 10^5
  • N \lt L \leq 10^9
  • 0\lt X_1 \lt X_2 \lt \cdots \lt X_N \lt L
  • 1 \leq A_i \leq 10^9 \ (1\leq i \leq N)

入力

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

N L
X_1 A_1
X_2 A_2
\vdots
X_N A_N

出力

答えを 1 行に出力せよ。


入力例1

2 7
1 5
4 4

出力例1

6

気力の初期値 T=6 でスタートした場合は以下のような気力の変動になります。

  • 1 番目のテントにたどり着いて気力が 5 減少し、気力が 1 になる。
  • 2 番目のテントにたどり着くまでに気力が 3 回復し、気力が 4 になる。
  • 2 番目のテントにたどり着いて気力が 4 減少し、気力が 0 になる。
  • 位置 7 にたどり着くまでに気力が 3 回復し、気力 3 の状態でテント列を終える。

気力の初期値 T=5 でスタートすると、2 番目のテントで気力が 0 未満になってしまうので、答えは 6 となります。


入力例2

8 11
2 6
3 10
4 8
5 7
7 7
8 1
9 9
10 2

出力例2

42
B - JANKEN Machine

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

「ジャンケン文字列」とは、R , S , P3 種類の文字のみからなる文字列のことです。
「ジャンケンマシーン」とは、ジャンケン文字列を入力として受け取って、長さの 1 小さい別のジャンケン文字列を出力する装置です。装置の挙動は以下のように定義されます。

  • 入力文字列を S 、出力文字列を T とする。Si 文字目を S_iTi 文字目を T_i と表すことにすると、T_i = f(S_i, S_{i+1}) (1 \le i \le |S|-1)となる文字列 T が出力される。ここで関数 f の出力は以下の表に対応する。(直感的には、2 人でジャンケンをした際に、負けない方の手。)
f(x, y) y=\mathrm{R} y=\mathrm{S} y=\mathrm{P}
x=\mathrm{R} \mathrm{R} \mathrm{R} \mathrm{P}
x=\mathrm{S} \mathrm{R} \mathrm{S} \mathrm{S}
x=\mathrm{P} \mathrm{P} \mathrm{S} \mathrm{P}

整数 k と、ジャンケン文字列 S が与えられます。長さ k + |S| のジャンケン文字列は 3^{k+|S|} 個存在しますが、これらのうち、ジャンケンマシーンへの入力を k 回繰り返すことで S を得ることができるようなものの個数を 998244353 で割った余りを求めてください。

制約

  • 1 \leq |S| \leq 3000
  • 1 \leq k \leq 3000
  • SR, S, P からなる

入力

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

S
k

出力

答えを 1 行に出力せよ。


入力例 1

SSRP
1

出力例 1

3

SSSRP , SPSRP , PSSRP3 通りです。


入力例 2

SSPPP
3

出力例 2

88

入力例 3

RRRPPP
20

出力例 3

88454144

998244353 で割った余りを出力してください。

C - Range Flip

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

長さ N の整数列 A_1, \ldots, A_N1 以上 N 以下の正の整数 D が与えられます。以下の操作を繰り返すことを考えます。

  • 1 \leq L \leq R \leq N かつ R-L+1=D であるような整数 L , R および整数 X を選び、A_L, A_{L+1}, \ldots ,A_R を一斉に、(X-A_L), (X-A_{L+1}), \ldots, (X-A_R) に書きかえる。

A_1, A_2, \ldots, A_N を有限回の操作で B_1, B_2, \ldots, B_N に一致させられるかを判定し、可能な場合はその操作手順の中で以下の条件をすべて満たすものを 1 つ構成してください。

  • 操作回数が 3\times 10^5 回以下。( 0 回でも良い。)
  • 各操作における X の絶対値が 10^{13} 以下。
なお、この問題の制約下で、有限回の操作で一致させることが可能な場合には上記の条件をすべて満たすような手順が存在することが証明できます。

制約

  • 入力は全て整数である。
  • 1 \leq D \leq N \leq 3\times 10^5
  • \lvert A_i \rvert \leq 10^6
  • \lvert B_i \rvert \leq 10^6

部分点

  • 1 \leq N \leq 3\times 10^4 を満たすデータセットに正解した場合は 50 点が与えられる。

入力

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

N D
A_1 A_2 \ldots A_N
B_1 B_2 \ldots B_N

出力

一致させられるならば Yes を、そうでなければ No を出力せよ。 Yes の場合は 2 行目に操作回数 K \ (0 \leq K \leq 3\times 10^5) を出力し、 その下に操作手順を以下の形式で K 行出力せよ。

L_1 R_1 X_1
\vdots
L_K R_K X_K

ただし、L_i, R_i,X_i(1 \leq i \leq K)i 回目の操作における L,R,X の値を表す。 条件を満たす解が複数存在する場合は、どれを出力してもよい。


入力例1

4 2
1 2 3 4
4 4 3 3

出力例1

Yes
3
1 2 5
3 4 7
2 3 7

  • 初期状態から(L,R,X)=(1,2,5)として操作を行うと [1,2,3,4]\to [4,3,3,4] となります。
  • 次に(L,R,X)=(3,4,7)として操作を行うと [4,3,3,4]\to [4,3,4,3] となります。
  • 最後に(L,R,X)=(2,3,7)として操作を行うと[4,3,4,3]\to [4,4,3,3] となり、 B と一致しています。


入力例2

2 2
1 2
1 3

出力例2

No

どのように操作しても一致させることができません。

D - Idol Group Costume

Time Limit: 3 sec / Memory Limit: 1024 MB

問題文

N 人組アイドルグループのプロデューサーである Motsu-P は、その中の K 人でグループ内ユニットを編成することにしました。強運の持ち主をユニットメンバーに選ぶべく、 K 人のユニットメンバーは、ライブ直前に一様ランダムに選出することにしました。

アイドル i\ (1\leq i\leq N) は、 M_i 個の衣装 1,\ 2,\ldots,M_i を所持しています。新ユニットお披露目ライブには、どの衣装を着てきても良いと彼女たちには伝えたため、彼女たちは各々が持っている衣装の中から一様ランダムに 1 つ選びます。しかし今になって、ユニット衣装は揃っていた方が良いと気付きました。ところがすでにライブ当日であり、今から衣装の変更をすることは間に合いません。Motsu-P の精神安定のために、ユニット衣装が偶然揃っている確率を計算してください。

ただし、ユニット全員の衣装のナンバーが同一であるとき、またそのときに限って、ユニット衣装が揃っているとします。また求める確率は有理数であることが証明できるので、注記で述べるように\bmod 998244353 で出力してください。

出力方法
有理数を出力する際は、まずその有理数を分数  \frac p q として表してください。ここで、p, q は整数であり、q は 998244353 で割り切れてはなりません (この問題の制約下で、そのような表現は必ず可能です)。そして、 p\equiv qr\pmod{998244353}  を満たすような 0 以上 998244353 未満の唯一の整数 r を出力してください。
ユニットメンバーと衣装の選出方法
ユニットメンバー及び各アイドルが選ぶ衣装は、それぞれ独立に一様ランダムに選ばれる。つまり、ユニットメンバーは {}_N C_K 通りの選び方が、同様に確からしく選出される。さらにそれとは独立にアイドル i が選ぶ衣装は M_i 通りの選び方が、同様に確からしく選出される。

制約

  • 入力は全て整数である。
  • 1 \leq K \leq N \leq 10^5
  • 1 \leq M_i \leq 10^8\ (1\leq i\leq N)

部分点

  • 1 \leq N \leq 2000 を満たすデータセットに正解した場合は 50 点が与えられる。

入力

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

N K
M_1 M_2 \ldots M_N

出力

答えを 1 行に出力せよ。


入力例 1

3 2
1 2 3

出力例 1

55458020

選ばれたアイドルの組を (x,y) のように表すと、ユニット衣装が揃っている確率は、 (1,2) のとき \frac12, (1,3) のとき \frac13 , (2,3) のとき \frac13 であるから、全体として \frac13\left(\frac12+\frac13+\frac13\right)=\frac7{18} となります。\bmod 998244353 で答えることに注意してください。


入力例 2

10 5
31415 92653 58979 32384 62643 38327 95028 84197 16939 93751

出力例 2

819006280
E - Sort Segments

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

Enjapma くんは、(1, 2, \ldots, N) の順列 P = (P_1, P_2, \ldots, P_N) を持っています。

Enjapma くんは、以下の操作をちょうど 1だけ行います。

  • 整数 k (\geq 0) と、1 \leq l_1 \lt r_1 \lt l_2 \lt r_2 \lt \cdots \lt l_k \lt r_k \leq N を満たす整数列 (l_1, r_1, l_2, r_2, \ldots , l_k, r_k) を選んだ後、各 i (1 \leq i \leq k) に対して、P_{l_i}, P_{l_{i}+1}, \ldots, P_{r_i} を昇順に並び替える。

操作後の P としてありうる順列の個数を、998244353 で割った余りを求めてください。

制約

  • 入力は全て整数である。
  • 1 \leq N \leq 2\times 10^5
  • 1 \leq P_i \leq N
  • P_1, P_2, \ldots, P_N は全て異なる。

部分点

  • 1 \leq N \leq 3000 を満たすデータセットに正解した場合は 50 点が与えられる。

入力

入力は以下の形式で与えられる。

N
P_1 P_2 \ldots P_N

出力

答えを 1 行に出力せよ。


入力例1

4
3 2 4 1

出力例1

6
  • k = 0 とすると、P = (3, 2, 4, 1) になります。
  • k = 1 として、(l_1, r_1) = (1, 2) を選択すると、P = (2, 3, 4, 1) になります。
  • k = 1 として、(l_1, r_1) = (1, 4) を選択すると、P = (1, 2, 3, 4) になります。
  • k = 1 として、(l_1, r_1) = (2, 4) を選択すると、P = (3, 1, 2, 4) になります。
  • k = 1 として、(l_1, r_1) = (3, 4) を選択すると、P = (3, 2, 1, 4) になります。
  • k = 2 として、(l_1, r_1,l_2, r_2) = (1, 2, 3, 4) を選択すると、P = (2, 3, 1, 4) になります。

他にも操作の方法はありますが、以上の 6 通りのいずれかと重複する結果になります。


入力例2

12
4 1 9 5 3 8 7 10 6 2 12 11

出力例2

300
F - Save Your MP

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

あなたは、魔物の群れに遭遇しました。群れは N 種類の魔物により構成されていて、 i 種類目の魔物が A_i 匹います。

あなたは、以下の 2 種類のスキルを使い分けることによって、全ての魔物を倒すことにしました。

  • スキル 1 : 魔力を X 消費する。魔物を K 匹まで選び、倒す。ただし、選ぶ魔物は全て 同じ 種類である必要がある。
  • スキル 2 : 魔力を Y 消費する。魔物を K 匹まで選び、倒す。ただし、選ぶ魔物は全て 違う 種類である必要がある。

全ての魔物を倒すために消費する必要がある魔力の最小値を求めてください。

制約

  • 入力は全て整数である。
  • 1 \leq K \leq N \leq 10^5
  • 1 \leq X, Y \leq 10^5
  • 1 \leq A_i \leq 10^5

入力

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

N K
X Y
A_1 A_2 \cdots A_N

出力

答えを 1 行に出力せよ。


入力例 1

5 2
10 15
1 1 1 1 2

出力例 1

40

種類 1 から 種類 4 までの魔物が 1 匹ずつと、種類 5 の魔物が 2 匹います。
次のようにスキルを使うことで、40 の消費魔力で魔物を倒すことができます。

  • 種類 1 の魔物と 種類 2 の魔物にスキル 2 を使う。魔力を 15 消費する。
  • 種類 3 の魔物と 種類 4 の魔物にスキル 2 を使う。魔力を 15 消費する。
  • 種類 5 の魔物 2 匹にスキル 1 を使う。魔力を 10 消費する。

これよりも少ない消費魔力で全ての魔物を倒すことはできないため、 40 が答えとなります。


入力例 2

5 2
15 10
1 1 1 1 2

出力例 2

30

この場合は、次のようにスキルを使うことで、30 の消費魔力で魔物を倒すことができます。

  • 種類 1 の魔物と 種類 2 の魔物にスキル 2 を使う。魔力を 10 消費する。
  • 種類 3 の魔物と 種類 5 の魔物にスキル 2 を使う。魔力を 10 消費する。
  • 種類 4 の魔物と 種類 5 の魔物にスキル 2 を使う。魔力を 10 消費する。

これよりも少ない消費魔力で全ての魔物を倒すことはできないため、 30 が答えとなります。


入力例 3

5 2
10 25
1 1 1 1 2

出力例 3

50

この場合は、次のようにスキルを使うことで、50 の消費魔力で魔物を倒すことができます。

  • 種類 1 の魔物にスキル 1 を使う。魔力を 10 消費する。
  • 種類 2 の魔物にスキル 1 を使う。魔力を 10 消費する。
  • 種類 3 の魔物にスキル 1 を使う。魔力を 10 消費する。
  • 種類 4 の魔物にスキル 1 を使う。魔力を 10 消費する。
  • 種類 5 の魔物 2 匹にスキル 1 を使う。魔力を 10 消費する。

これよりも少ない消費魔力で全ての魔物を倒すことはできないため、 50 が答えとなります。

G - D. D. Construction

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

整数 NN \times N 行列 A が与えられます。 以下の条件を満たす整数 MM 個の N\times N 行列 B_1 , \ldots , B_M を出力してください。

  • 1 \leq M \leq 1000
  • 任意の 1\leq i \leq M について、B_i の全ての成分は絶対値が 40 以下の整数
  • 任意の 1 \leq i \leq M について、 \det(B_i) = \det(A)
  • \sum_{i=1}^{M} B_i = \text{diag}(MA_{11} , MA_{22} , \ldots , MA_{NN})

入力の条件下で、上記の制約を満たす出力が可能であることが証明できます。

\det の定義
行列 A に対し、 \det(A)A の行列式を表します。

行列式のWikipediaへのリンク
\text{diag} の定義
N 個の整数 x_1, \cdots , x_N に対して、 \text{diag}(x_1 , x_2 , \ldots , x_N) は、
  • 1\leq i \leq N に対し、 ii 列目の成分が x_i
  • 1\leq i , j \leq N, i\neq j に対し、 ij 列目の成分が 0
となる N\times N 行列を表します。
対角行列のwikipediaへのリンク

制約

  • 入力は全て整数である。
  • 2\leq N \leq 8
  • |A_{ij}| \leq 40

入力

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

N
A_{11} \ldots A_{1N}
\vdots
A_{N1} \ldots A_{NN}

出力

1 行目に行列の個数 M を出力せよ。 続く NM 行のうち、 1 \leq i \leq M , 1 \leq j \leq N を満たす i , j に対して、 (i - 1)N + j 行目に B_ij 行目を空白区切りで出力せよ。具体的には以下の形式で出力せよ。

M
(B_1)_{11} \ldots (B_1)_{1N}
\vdots
(B_1)_{N1} \ldots (B_1)_{NN}
\vdots
(B_M)_{11} \ldots (B_M)_{1N}
\vdots
(B_M)_{N1} \ldots (B_M)_{NN}
ただし、出力は問題文中の条件を満たす必要がある。 条件を満たす解が複数存在する場合は、どれを出力してもよい。

入力例1

3
1 0 0
0 1 0
0 0 1

出力例1

3
-2 -1 2
0 1 1
1 0 -2
0 0 -1
-1 2 -2
0 1 1
5 1 -1
1 0 1
-1 -1 4

出力された行列は、 \begin{pmatrix} -2&-1&2 \\ 0&1&1 \\ 1&0&-2 \end{pmatrix} \begin{pmatrix} 0&0&-1 \\ -1&2&-2 \\ 0&1&1 \end{pmatrix} \begin{pmatrix} 5&1&-1 \\ 1&0&1 \\ -1&-1&4 \end{pmatrix} 3 つであり、

いずれも行列式は 1 = \det(A) で、これらの行列の和は、 \begin{pmatrix} 3&0&0 \\ 0&3&0 \\ 0&0&3 \end{pmatrix} になります。

これは、 \text{diag}(3,3,3) = \begin{pmatrix} 3&0&0 \\ 0&3&0 \\ 0&0&3 \end{pmatrix} に等しいです。

H - Grid Eraser

Time Limit: 1 sec / Memory Limit: 1024 MB

問題文

umg くんは縦 H 行、横 W 列のグリッドを持っています。各マスは白色または黒色です。上から i 行目、左から j 列目のマスの色は S_{ij} で表され、 . のとき白、 # のとき黒です。 umg くんは、以下の 2 種類の操作を好きな順序で好きな回数行うことでポイントを得ます。

  • i 行目のマスがすべて同じ色であるような i を選び、 i 行目を削除して 1 ポイントを得る。その後、 i-1 行目と i+1 行目は(存在すれば)連結される。
  • j 列目のマスがすべて同じ色であるような j を選び、j 列目を削除して 1 ポイントを得る。その後、 j-1 列目と j+1 列目は(存在すれば)連結される。

グリッドのマスが 1 つも存在しない場合、操作を行うことができません。 umg くんは最大で何ポイントを得ることができるでしょうか?

制約

  • 1 \leq H,W \leq 2000
  • S_{ij}. または #

入力

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

H W  
S_{11}\cdotsS_{1W}  
\vdots  
S_{H1}\cdotsS_{HW}  

出力

答えを 1 行に出力せよ。


入力例1

3 3
.##
...
##.

出力例1

2

次のように操作を行い 2 ポイントを得るのが最適となります。

2 行目を削除して 1 ポイントを得る。その後、グリッドは以下のようになる。

.##
##.

2 列目を削除して 1 ポイントを得る。その後、グリッドは以下のようになる。

.#
#.

もう操作を行うことはできない。


入力例2

7 56
........................................................
.#...#..#####..#####...####..#####..#####..#####..#####.
.#...#....#....#...#..#..........#..#...#......#..#...#.
.#...#....#....####...#......#####..#...#..#####..#...#.
.#...#....#....#......#......#......#...#..#......#...#.
..###.....#....#.......####..#####..#####..#####..#####.
........................................................

出力例2

24
I - UTPC Kingdom

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

UTPC 王国には N 個の街 1, \ldots, NM 本の街道があり、i 番目の街道は街 A_i と街 B_i を結んでいます。 街を頂点、街道を辺としたグラフは無向連結グラフで、多重辺は含まれる可能性がありますが自己ループはありません。

街道には危険なモンスターが出現します。i 番目の街道の危険度とは、出現するモンスターの強さに合わせて定められた整数 C_i です。ただし、C_1, \ldots, C_M は相異なります。

旅とは、ある街から出発していくつかの街道に沿って街に向かう時の街道の列とします。旅 J = (J_1, J_2, \ldots, J_L) の危険度は \sum_{i = 1}^{L} (10^6)^{C_{J_i}} で定義されます。 また、街 i と街 j の仲の悪さを、2 つの街を繋ぐ旅の危険度の最小値で定めます。そのような旅が存在しないとき、仲の悪さは 10^{10^{10}} とします。

UTPC 王国はとても不運な王国で、i 年目には、T_i 番目の街道が災害で通行不可能になります。 街道が通行不可能になったことで仲の悪さが増加した街の組はいがみあってしまい、とても危険な状態になってしまいます。 このような街の組を直接結ぶ街道があれば、それらを同時に封鎖することで通行不可能にし、国の平穏を保つことにしました。また、この措置の影響でいがみあっている街の組が出来てしまった場合、同様の措置を繰り返します。 この操作は有限回で終わることが示されます。一度通行不可能になった街道が再度通行可能になることはありません。

Q 年間の災害で通行不可能になった街道の情報が与えられます。

i 年目に初めて封鎖または災害によって通行不可能になった街道の番号の和 S_i を出力してください。 ただし、T_i は暗号化されていて直接読み込むことはできません。 X_i が入力として与えられ、S_{i-1} \oplus X_i = T_i として、T_i が復元されます。(\oplus は xor を表し、S_00 であるとします。)

また、災害によって通行不可能になる街道が既に封鎖されている場合もあることに注意してください。

制約

  • 入力はすべて整数である。
  • 1 \le N, M, Q \le 3 \times 10^5
  • 1 \le A_i, B_i \le N
  • 1 \le C_i \le 10 ^ 9
  • C_i は相異なる。
  • 1 \le T_i = S_{i-1} \oplus X_{i} \le M
  • T_i は相異なる。
  • 街を頂点、街道を辺としたグラフは無向連結グラフで、多重辺は含まれる可能性があるが自己ループは含まれない。

入力

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

N M
A_1 B_1 C_1
\vdots
A_M B_M C_M
Q
X_1
\vdots
X_Q

出力

Q 行出力せよ。i 行目には、i 年目に初めて封鎖または災害によって通行不可能になった街道の番号の和 S_i を出力せよ。


入力例1

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

出力例1

8
2

1 年目では S_0 \oplus 1 = 1 なので 1 番目の街道が災害により通行不可能になります。 これにより、3, 4 番目の街道を封鎖しなければならなくなります。 1, 3, 4 番目の街道が通れなくなるので S_1=8 です。よって 8 を出力します。

2 年目では S_1 \oplus 10 = 2 より 2 番目の街道が災害により通行不可能になります。 新しく封鎖するべき街道はありません。よって 2 を出力します。

J - Merge and Decrement

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

黒板に N 個の整数が書かれています。i 番目の整数は A_i です。

あなたは、以下の 2 種類の操作を、それぞれ好きな順に何度でも行うことができます。

  • 操作 1 : 黒板に書かれている数 x1 つ選び、消す。その後、黒板 に x - 1 を書く。
  • 操作 2 : 黒板に書かれている 2 つの数 x, y であって、|x - y| \le 1 を満たすものを選び、それらを消す。その後、2 つの数の和 x + y を黒板に書く。

最終的に、黒板にM 個の整数 B_1, B_2, \ldots , B_M のみ が書かれている状態にできるかどうかを判定してください。

T 個のテストケースが与えられるので、それぞれについて答えを求めてください。

制約

  • 入力は全て整数である。
  • 1 \leq T \leq 10^5
  • 1 \leq M \leq N \leq 10^5
  • 1 \leq A_i \leq 10^9
  • 1 \leq B_i \leq 10^9
  • 1 つの入力ファイルにおいて、N の総和、M の総和はどちらも 2 \times 10^5 を超えない。

入力

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

T
\mathrm{case}_1
\vdots
\mathrm{case}_T

各ケースは以下の形式で与えられる。

N M
A_1 A_2 \ldots A_N
B_1 B_2 \ldots B_M

出力

T 行出力せよ。i 行目には i 番目のテストケースについて、達成可能なら Yes、不可能なら No を出力せよ。


入力例1

3
2 1
5 3
7
2 1
6 2
7
5 3
3 4 3 6 3
3 5 8

出力例1

Yes
No
Yes

3 つ目のテストケースでは、以下のように操作をすることで達成可能です。

  1. 操作 2 によって、33 を消して 6 を書きます。
  2. 操作 1 によって、6 を消して 5 を書きます。
  3. 操作 2 によって、45 を消して 9 を書きます。
  4. 操作 1 によって、9 を消して 8 を書きます。
  5. 操作 1 によって、6 を消して 5 を書きます。
K - Special Chopsticks

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

のいみちゃんとのいむくんはお母さんにお箸をプレゼントするため、箸作り職人の高橋先生とお箸を作ることにしました。 お箸とは、長さが等しい木片の組のことです。

N 本の青色の木片と N 本の黄色の木片が準備されていて、それぞれ 1 から N の番号が付けられています。 i 番目の青色の木片の長さは A_ii 番目の黄色の木片の長さは B_i です。また、A_i 同士、B_i 同士はそれぞれ相異なります。

のいみちゃんとのいむくんはお母さんに K 本のお箸をプレゼントしたいです。 高橋先生は 2 人のために K 種類の長さの赤色の木片を、各 2 本ずつ準備することにしました。 i 種類目の赤色の木片の長さは C_i で、これらは相異なる必要があります。

2 人と高橋先生は以下の手順を K 回繰り返すことでお箸を K 本作ります。 i 回目の操作は以下の通りです。

  1. のいみちゃんが現時点で残っている赤色の木片から、長さ C_{L_i} と長さ C_{R_i} の木片を選び、それらを繋げて長さ C_{L_i} + C_{R_i} の木片を高橋先生に手渡す。
  2. のいむくんが S_i 番目の青色の木片と T_i 番目の黄色の木片を繋げて、長さ A_{S_i} + B_{T_i} の木片を高橋先生に手渡す。
  3. 2 つの木片の長さの差が M の倍数ならば、高橋先生が長さ M の木片をいくつか繋げてお箸にする。そうでないとき、お箸作りは失敗となる。

のいみちゃんは既に L_i, R_i を決めてしまっています。 高橋先生とのいむくんが適切に C_i, S_i, T_i を決めることで K 本のお箸を完成させることが出来るかを判定し、可能な場合はそのような決め方を 1 つ出力してください。

制約

  • 入力は全て整数である。
  • N = 2 \times 10^5
  • M = 10 ^ 6 + 3 (素数)
  • K = 4 \times 10 ^ 4
  • 1 \le A_i, B_i \le M
  • A_i は相異なる。
  • B_i は相異なる。
  • 1 \le L_i, R_i \le K
  • x(1 \le x \le K)L_i, R_i の中にちょうど 2 回現れる。

入力

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

N M K
A_1 A_2 \ldots A_N
B_1 B_2 \ldots B_N
L_1 R_1
\vdots
L_K R_K

出力

不可能な場合は -1 を出力せよ。 可能な場合は以下の形式で K+1 行出力せよ。

C_1 C_2 \ldots C_K
S_1 T_1
\vdots
S_K T_K

ただし、S_i, T_i はそれぞれ i 回目の操作でのいむくんが選ぶ青色、黄色の木片の番号を表す。 また、出力は以下の条件を満たす必要がある。

  • 1 \le C_i \le M
  • C_i は相異なる。
  • 1 \le S_i, \, T_i \le N
  • S_i は相異なる。
  • T_i は相異なる。
  • A_{S_i} + B_{T_i} \equiv C_{L_i} + C_{R_i} \pmod M
条件を満たす解が複数存在する場合は、どれを出力してもよい。

入力例1

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

ただし、このサンプルは制約を満たしていないためテストケースには含まれないことに注意してください。

出力例1

2 3 5
2 1
3 3
1 2

高橋先生が用意した 3 種類の赤色の木片の長さは順に、2, 3, 5 です。

1 回目の操作では、のいみちゃんは 1 種類目の赤色の木片を 2 つ選び繋げて長さ 4 の木片を作ります。 のいむくんは 2 番目の青色の木片と 1 番目の黄色の木片を繋げて長さが 4 の木片を作ります。 2 本の木片は長さが揃っているので高橋先生は何もする必要がありません。

2 回目の操作では、のいみちゃんは 2 種類目の赤色の木片と 3 種類目の赤色の木片を繋げて長さ 8 の木片を作ります。 のいむくんは 3 番目の青色の木片と 3 番目の黄色の木片を繋げて長さが 8 の木片を作ります。 2 本の木片は長さが揃っているので高橋先生は何もする必要がありません。

3 回目の操作では、のいみちゃんは 3 種類目の赤色の木片と 2 種類目の赤色の木片を繋げて長さ 8 の木片を作ります。 のいむくんは 1 番目の青色の木片と 2 番目の黄色の木片を繋げて長さが 3 の木片を作ります。 高橋先生はのいむくんの作った木片に長さ 5 の木片を 1 つ足すことで長さが 8 の木片にします。

以上により、3 本のお箸が完成しました。

L - Euclidean Distance Product

Time Limit: 2 sec / Memory Limit: 1024 MB

問題文

P を素数 299993 とします。 xy 平面上に N 個の格子点が与えられます。 i 番目の格子点の座標は (x_i,y_i) です。 平面上の格子点 S の座標を (S_x,S_y) として、 整数 f(S) を次のように定めます。

f(S)=\displaystyle \prod_{1\leq i\leq N}\left((S_x - x_i)^2 + (S_y - y_i)^2 \right)

整数 Z が与えられます。 x 座標、 y 座標がともに、 0 以上 P 未満の格子点 U であって、 f(U)\equiv Z \pmod P となるものの個数を求めてください。

制約

  • 入力は全て整数である。
  • 1 \leq N \leq 100
  • 0 \leq Z \lt P = 299993
  • 0 \leq x_i \ ,y_i \lt P = 299993
  • i\neq j ならば、 (x_i,y_i)\neq(x_j,y_j)

入力

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

N Z 
x_1 y_1
x_2 y_2
\vdots
x_N y_N

出力

答えを 1 行に出力せよ。


入力例1

1 1
1 1

出力例1

299992
例えば S = (12345,6789) のとき f(S) = (12345 - 1)^2 + (6789 - 1)^2 = 152374336 + 46076944 = 198451280 となります。 f(S) \equiv 1 \pmod Pとなる S299992 個あります。

入力例2

10 89872
223484 90627
277624 145685
121818 45893
100399 298120
290298 53417
83968 217141
293596 75934
66042 121754
12383 235338
8014 175352

出力例2

300588
M - Not Another Geometry Game!

Time Limit: 5 sec / Memory Limit: 1024 MB

問題文

冒険者の Platypus くんと Qlatyqus くんは巨大な平原に点在するダンジョンを攻略中です。 2 人は N 日間にわたって冒険をし、1 日ごとに Platypus くんと Qlatyqus くんのいずれかがある地点に存在するダンジョンを攻略します。 具体的には、i 日目 (1\leq i \leq N) には、 A_iP のときは Platypus くんが、また A_iQ のときは Qlatyqus くんが、座標 (X_i, Y_i) にあるダンジョンを攻略します。ここで、X_i,Y_i は整数です。

なるべく広い範囲のダンジョンを攻略するために、2 人がなるべく協力するべきであるという観点から、i 日目時点での 2 人への報酬金 S_i は以下のように定められています。

  • Platypus くんが i 日目までに攻略したあるダンジョンの点と、 Qlatyqus くんが i 日目までに攻略したあるダンジョンの点の、2 点の中点をとる操作を考える。この操作によって得られる中点すべての集合を M とする。M の点をすべて包含するような凸多角形のうち、その面積が最小となるようなものの面積を S_i とする。ただし、そのような凸多角形で、いくらでも小さい面積のものが存在しうる場合、S_i=0 とする。

Platypus くんと Qlatyqus くんは、1 日経つごとに報酬金がいくらになったかを計算したいと考えました。彼らの N 日間におけるダンジョンの攻略情報が与えられるので、i 日目時点での 2 人への報酬金 S_i1 日ごとに報告するプログラムを作成してください。ただし、求める値は有理数であることが証明できるので、注記で述べるように \bmod 998244353 で出力してください。

出力方法
有理数を出力する際は、まずその有理数を分数  \frac p q として表してください。ここで、p, q は整数であり、q は 998244353 で割り切れてはなりません (この問題の制約下で、そのような表現は必ず可能です)。そして、 p\equiv qr\pmod{998244353}  を満たすような 0 以上 998244353 未満の唯一の整数 r を出力してください。

制約

  • 1 \leq N \leq 2 \times 10^5
  • X_i, Y_i は整数で、0 \leq X_i, Y_i \lt 998244353 \ (1 \leq i \leq N) を満たす
  • A_i は文字 PQ のいずれか
  • i \neq j かつ A_i = A_j ならば (X_i, Y_i) \neq (X_j, Y_j)

入力

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

N
A_1 X_1 Y_1
\vdots
A_N X_N Y_N

出力

N 行出力せよ。i 行目には、 i 日目時点での報酬金 S_i の値を、出力方法で示した通りに出力せよ。


入力例1

5
P 0 1
Q 1 0
P 2 1
Q 1 2
Q 2 2

出力例1

0
0
0
1
748683266
  • 1 日目は Platypus くんが座標 (0,1) にあるダンジョンを攻略します。まだ Qlatyqus くんが攻略したダンジョンが存在しないので、報酬金は 0 です。
  • 2 日目には、Qlatyqus くんは座標 (1,0) にあるダンジョンを攻略します。初日に攻略したダンジョンと 2 日目に攻略したダンジョンの中点は \left(\frac{1}{2},\frac{1}{2}\right) ですが、1 点を内包するような凸多角形としていくらでも小さいものが取れるので、まだ報酬金は 0 です。
  • 同様の理由で、 3 日目も報酬金は 0 です。
  • 4 日目になると、以下の図のように、紫色で示された点が中点の集合 M を表し、紫色の多角形が M を包含するような凸多角形を表します。
    4 日目までのダンジョンの攻略状況(青い点は Platypus くん、赤い点は Qlatyqus くんが攻略したダンジョンの位置を示している)

    よって報酬金は 1 となります。
  • 最終日の中点の集合 M と凸多角形は以下の図のようになります。
    最終的なダンジョンの攻略状況

    よって報酬金は \frac{5}{4} となります。出力方法に注意してください。

入力例2

8
P 0 0
Q 0 0
P 0 998244352
Q 0 998244352
P 998244352 0
Q 998244352 0
P 998244352 998244352
Q 998244352 998244352

出力例2

0
0
0
0
623902721
499122177
124780545
1