A - ABC

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

長さ N の文字列 S があります。S の各文字は \mathtt{A},\mathtt{B},\mathtt{C} のいずれかです。

これから S に以下の操作を K 回行います。最終的な S としてありえる文字列の数を 998244353 で割った余りを求めてください。

  • 1\leq i\leq |S|-1 を満たす整数 i を選ぶ。Si 文字目と i+1 文字目が等しいならば、Si 文字目の直後に Si 文字目と等しい文字を挿入する。そうでないならば、Si 文字目の直後に \mathtt{A},\mathtt{B},\mathtt{C} のうち Si 文字目と i+1 文字目のどちらとも等しくないものを挿入する。

制約

  • 2\leq N\leq 2\times 10^5
  • 1\leq K\leq 2\times 10^5
  • S\mathtt{A},\mathtt{B},\mathtt{C} のみからなる長さ N の文字列

入力

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

N K
S

出力

最終的な S としてありえる文字列の数を 998244353 で割った余りを出力してください。


入力例 1

4 2
AABB

出力例 1

7

例えば、以下の手順で \mathtt{AABCBB} を作ることができます。

  1. i=2 とする。S2 文字目の直後に \mathtt{C} を挿入する。
  2. i=2 とする。S2 文字目の直後に \mathtt{B} を挿入する。

入力例 2

2 10
CC

出力例 2

1

入力例 3

19 21
AABCBAACCCACACCCBAB

出力例 3

957795267
B - AND

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

長さ n\geq 2 の非負整数列 a=(a_1,a_2,\ldots,a_n) について、f(a) を以下の値として定義します。

  • 次の操作を行って a の全ての要素を 0 に等しくできるならば、そうするために必要な操作回数の最小値。できないならば -1
    • 1\leq i\leq n,1\leq j\leq n,|i-j|=1 を満たす整数 i,j を選ぶ。a_ia_i\operatorname{AND}a_j で置き換える。

長さ N の非負整数列 A=(A_1,A_2,\ldots,A_N) が与えられます。Q 個のクエリを処理してください。

i 番目のクエリでは整数 L_i,R_i が与えられるので、f((A_{L_i},A_{L_i+1},\ldots,A_{R_i})) を求めてください。

AND の定義 非負整数 x,y に対し、ビットごとの論理積 x\operatorname{AND}y は以下のように定義されます。
  • x\operatorname{AND}y2 進法で表現したときの 2^k の位の数は、xy2 進法で表現したときの 2^k の位の数がともに 1 である場合 1 で、そうでない場合 0
例えば、5\operatorname{AND}12=4 です。(2 進法表記だと 101\operatorname{AND}1100=100 となります。)

制約

  • 2\leq N\leq 2\times 10^5
  • 0\leq A_i\lt 2^{30}
  • 1\leq Q\leq 2\times 10^5
  • 1\leq L_i\lt R_i\leq N

入力

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

N
A_1 A_2 \ldots A_N
Q
L_1 R_1
L_2 R_2
\vdots
L_Q R_Q

出力

各クエリで求めた値を改行区切りで出力してください。


入力例 1

3
5 6 11
2
1 3
2 3

出力例 1

4
-1

1 番目のクエリでは、a=(5,6,11) として f(a) の値を出力します。a(5,6,11)\rightarrow(5,4,11)\rightarrow(5,0,11)\rightarrow(5,0,0)\rightarrow(0,0,0) と変化するように操作を行うと、4 回の操作で a の要素を全て 0 と等しくできます。4 回より少ない操作手順は存在しないことが証明できるので、f(a)=4 となります。

2 番目のクエリでは、a=(6,11) として f(a) の値を出力します。どのように操作を行っても a の全ての要素を 0 と等しくすることはできないことが証明できるので、f(a)=-1 となります。


入力例 2

10
1017 40 583 310 485 428 726 123 143 962
10
2 3
2 10
3 10
5 8
5 6
5 6
3 8
6 7
1 9
1 9

出力例 2

2
9
9
5
-1
-1
7
-1
9
9
C - DEC

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

T 個のテストケースについて、以下の問題を解いてください。

3 枚の皿があり、皿 1 には A 枚、皿 2 には B 枚、皿 3 には C 枚のコインが乗っています。これらを用いて Alice と Bob がゲームをします。Alice が先手を取り、2 人で以下の行動を交互に行います。

行動:次の 2 つのうちいずれかを選び、行う。

  • 正整数 x を選ぶ。皿 12 の両方から x 枚ずつコインを取り除く。
  • 正整数 x を選ぶ。皿 23 の両方から x 枚ずつコインを取り除く。

行動ができなかった人が負け、負けなかった人が勝ちます。Alice と Bob のどちらに必勝法があるか判定してください。

制約

  • 1\leq T\leq 2\times 10^5
  • 1\leq A,B,C\leq 10^9

入力

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

T
\mathrm{test}_1
\mathrm{test}_2
\vdots
\mathrm{test}_T

ここで、\mathrm{test}_ii 番目のテストケースの情報を表し、次の形式で与えられます。

A B C

出力

各テストケースに対する答えを改行区切りで順に出力してください。

それぞれのテストケースについて、Alice に必勝法がある場合は Alice を、Bob に必勝法がある場合は Bob を出力してください。


入力例 1

4
3 8 4
10 10 10
131 313 131
314159265 358979323 846264338

出力例 1

Alice
Alice
Bob
Alice

例えば、1 番目のテストケースに対しては次のようなゲームの進行が考えられます。

  1. Alice が皿 12 の両方から 2 枚ずつコインを取り除く。
  2. Bob が皿 23 の両方から 1 枚ずつコインを取り除く。
  3. Alice が皿 23 の両方から 2 枚ずつコインを取り除く。
  4. Bob が皿 23 の両方から 1 枚ずつコインを取り除く。
  5. Alice が皿 12 の両方から 1 枚ずつコインを取り除く。

最終的に皿 2 にのみコインが 1 枚残り、Bob は操作ができなくなります。この進行はあくまで一例であり、必ずしも最適な行動をとっているとは限りませんが、このテストケースでは Alice に必勝法があることが証明できます。

D - GCD

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

以下の条件を満たす長さ 30 の正整数列 a=(a_1,a_2,\ldots,a_{30}) を出力してください。

  • 1 \le a_i \le 10^{18}\ (1 \le i \le 30)
  • すべての連続する区間の最大公約数が相異なる。より形式的には、 (i,j)\ (1 \le i \le j \le 30)(k,l)\ (1\le k \le l \le 30) について、 (i,j) \neq (k,l) ならば、 \gcd(a_i,a_{i+1},\ldots,a_j)\neq \gcd(a_k,a_{k+1},\ldots,a_l) を満たす。

入力

この問題では入力は与えられません。

出力

問題文中の条件を満たす a を以下の形式で出力してください。

a_1 a_2 \ldots a_{30}

条件を満たす解が複数存在する場合、どれを出力しても正解とみなされます。

E - MEX

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

0 以上 M 以下の整数からなる数列 A=(A_1,A_2,\ldots,A_N) であって、次の条件を満たすものの数を、998244353 で割った余りを求めてください。

  • B_i=\operatorname{mex}(\lbrace A_i,A_{i+1},\ldots,A_{i+K-1}\rbrace) として数列 B=(B_1,B_2,\ldots,B_{N-K+1}) を作ったとき、B は狭義単調増加である。つまり、B_1\lt B_2\lt\cdots\lt B_{N-K+1} を満たす。
mex の定義 非負整数の有限集合 S に対し、\operatorname{mex}(S)x\not\in S である非負整数 x の最小値として定めます。

制約

  • 1\leq N\leq 2\times 10^5
  • 1\leq M\leq 2\times 10^5
  • 1\leq K\leq N

入力

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

N M K

出力

条件を満たす A の数を 998244353 で割った余りを一行に出力してください。


入力例 1

3 1 2

出力例 1

2

(0,0,1)(1,1,0)2 つが条件を満たします。


入力例 2

4 4 1

出力例 2

0

入力例 3

271 828 182

出力例 3

125683497
F - MEX2

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

正整数 N、非負整数 K、長さ N の非負整数列 A=(A_{1},A_{2},\ldots,A_{N}) が与えられます。

整数組 (L,R) であって 1\leq L\leq R\leq N かつ \operatorname{mex}(\lbrace A_{L},A_{L+1},\ldots,A_{R}\rbrace)=K を満たすものの個数を計算してください。

mex の定義 非負整数の有限集合 S に対し、\operatorname{mex}(S)x\not\in S である非負整数 x の最小値として定めます。

制約

  • 1\leq N\leq 2\times 10^{5}
  • 0\leq K\leq N
  • 0\leq A_i\leq N

入力

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

N K
A_{1} A_{2} \ldots A_{N}

出力

条件を満たす (L,R) の個数を出力してください。


入力例 1

5 2
0 1 2 1 0

出力例 1

2

条件を満たす (L,R)(1,2)(4,5)2 つです。


入力例 2

5 0
1 2 3 4 5

出力例 2

15

入力例 3

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

出力例 3

11
G - MOD

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

T 個のテストケースについて、以下の問題を解いてください。

長さ N の数列 A=(A_1,A_2,\ldots,A_N) があり、現在全ての 1\leq i\leq N について A_i=0 です。

あなたの目標は全ての 1\leq i\leq N について A_i\equiv R_i\pmod{M} が成立するようにすることです。これを実現させるため、以下の操作を任意の回数行うことができます。(一度も行わないこともできます。)

  • 1\leq j\leq K を満たす整数 j を選ぶ。AP_j 番目の要素に 1 を加える。さらに、AQ_j 番目の要素に 1 を加える。

目標が達成可能かどうかを判定してください。

制約

  • 1\leq T\leq 2\times 10^5
  • 1\leq N\leq 2\times 10^5
  • 2\leq M\leq 10^9
  • 1\leq K\leq 2\times 10^5
  • 0\leq R_i\lt M
  • 1\leq P_i\leq N
  • 1\leq Q_i\leq N
  • 1 つの入力に含まれる N の総和、K の総和はそれぞれ 2\times 10^5 を超えない

入力

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

T
\mathrm{test}_1
\mathrm{test}_2
\vdots
\mathrm{test}_T

ここで、\mathrm{test}_ii 番目のテストケースの情報を表し、次の形式で与えられます。

N M K
R_1 R_2 \ldots R_N
P_1 Q_1
P_2 Q_2
\vdots
P_K Q_K

出力

各テストケースに対する答えを改行区切りで順に出力してください。

それぞれのテストケースについて、目標が達成可能な場合は Yes を、達成不可能な場合は No を出力してください。


入力例 1

3
6 3 5
0 1 0 1 2 0
1 2
1 6
4 5
5 2
5 6
6 4 7
2 3 1 2 3 0
1 4
3 2
3 5
6 5
4 6
1 2
2 4
4 5 4
2 4 2 4
1 3
1 3
2 4
2 4

出力例 1

Yes
No
Yes

1 番目のテストケースでは、次の順序で操作を行うことで目標が達成できます。

  1. j=2 とする。A=(1,0,0,0,0,1) になる。
  2. j=1 とする。A=(2,1,0,0,0,1) になる。
  3. j=2 とする。A=(3,1,0,0,0,2) になる。
  4. j=3 とする。A=(3,1,0,1,1,2) になる。
  5. j=5 とする。A=(3,1,0,1,2,3) になる。

最終的に全ての 1\leq i\leq 6 について A_i\equiv R_i\pmod{3} とできていることが確認できます。

H - ROT

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

空でない文字列 X と非負整数 K に対して、\operatorname{rot}(X,K) を次のように定めます。

  • X の先頭の文字を末尾に移動させるという操作を K 回行った結果得られる文字列。

長さの等しい空でない文字列 X, Y に対し、f(X, Y) を次のように定めます。

  • 0\leq i\lt|X| かつ \operatorname{rot}(X,i)\operatorname{rot}(Y,i) よりも辞書順で小さくなるような整数 i の個数。

正整数 N と、ともに長さが N である文字列 S,T が与えられます。以下の 2 種類のクエリが合計で Q 個与えられるので処理してください。

  • クエリ 1: 整数 L,R が与えられる。SL 文字目から R 文字目までを抜き出して得られる文字列を S'TL 文字目から R 文字目までを抜き出して得られる文字列を T' として、f(S',T') を求める。
  • クエリ 2: 整数 X, Y と英小文字 C が与えられる。X = 1 のとき SY 文字目を C で置き換える。X = 2 のとき TY 文字目を C で置き換える。

制約

  • 1\leq N\leq 2\times 10^{5}
  • ST は英小文字からなる長さ N の文字列
  • 1\leq Q\leq 2\times 10^{5}
  • クエリ 1 について、1\leq L\leq R\leq N
  • クエリ 2 について、X\in\lbrace 1,2\rbrace,1\leq Y\leq N であり、C は英小文字

入力

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

N
S
T
Q
\mathrm{Query}_{1}
\mathrm{Query}_{2}
\vdots
\mathrm{Query}_{Q}

ただし、\mathrm{Query}_{i}i 番目のクエリの内容を表します。それぞれのクエリの内容は以下の形式で与えられます。

  • i 番目のクエリがクエリ 1 であるとき
1 L R
  • i 番目のクエリがクエリ 2 であるとき
2 X Y C

出力

それぞれのクエリ 1 について答えを 1 行に出力してください。


入力例 1

9
dacbyzyzx
dcabzyzyx
6
1 2 4
1 5 9
2 1 1 z
1 1 1
2 2 9 a
1 6 9

出力例 1

2
3
0
1

1 番目のクエリについて説明します。S'=\mathtt{acb},T'=\mathtt{cab} であり、f(S',T') を出力する必要があります。

  • \operatorname{rot}(S',0)=\mathtt{acb},\operatorname{rot}(T',0)=\mathtt{cab}
  • \operatorname{rot}(S',1)=\mathtt{cba},\operatorname{rot}(T',1)=\mathtt{abc}
  • \operatorname{rot}(S',2)=\mathtt{bac},\operatorname{rot}(T',2)=\mathtt{bca}

ですから、このクエリに対する出力は 2 です。


入力例 2

20
pilrajvvuwrcxvbchgyf
pitlabnvzyrmoveahgyr
20
2 2 3 l
2 2 3 l
1 3 17
2 1 6 b
1 1 13
1 19 20
1 8 14
1 2 16
2 1 9 c
2 2 19 x
2 1 20 r
2 2 9 c
1 7 7
1 11 13
1 10 20
1 9 11
2 2 1 b
1 6 16
2 1 1 w
2 1 1 q

出力例 2

7
5
2
6
7
0
2
6
3
7
I - TREE

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

N 頂点の根付き木があります。頂点には 1 から N までの番号がつけられています。この木の根は頂点 1 で、2\leq i\leq N について頂点 i の親は P_i\,(P_i\lt i) です。

あなたはこれから (1,2,\ldots,N) の順列 Q=(Q_1,Q_2,\ldots,Q_N)1 つ決めます。すると、各 1\leq i\leq N について、頂点 Q_i が頂点 V_i の部分木内にあるときにコスト C_i が発生します。

発生するコストの総和の最小値を計算してください。

制約

  • 2\leq N\leq2\times10^5
  • 1\leq P_i\lt i
  • 1\leq V_i\leq N
  • 1\leq C_i\leq10^9

入力

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

N
P_2 P_3 \ldots P_N
V_1 V_2 \ldots V_N
C_1 C_2 \ldots C_N

出力

発生するコストの総和の最小値を出力してください。


入力例 1

3
1 2
2 2 2
1 2 3

出力例 1

3

Q=(3,2,1) とすると、発生するコストの総和は 1+2=3 です。これが最小値です。


入力例 2

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

出力例 2

5

入力例 3

9
1 2 3 2 3 2 3 2
2 2 2 3 3 2 3 2 3
124 981 554 92 498 327 613 709 192

出力例 3

1714
J - XOR

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

T 個のテストケースについて、以下の問題を解いてください。

非負整数 L,R\,(L\leq R) が与えられます。\lbrace L,L+1,\ldots,R\rbrace の部分集合を 1 つ選ぶとき、その集合に含まれる数の総 XOR としてありえる整数はいくつありますか?ただし、0 個の数の XOR は 0 とします。

XOR の定義 非負整数 x,y に対し、ビットごとの排他的論理和 x\operatorname{XOR}y は以下のように定義されます。
  • x\operatorname{XOR}y2 進法で表現したときの 2^k の位の数は、xy2 進法で表現したときの 2^k の位の数が一方のみ 1 である場合 1 で、そうでない場合 0
例えば、5\operatorname{XOR}6=3 です。(2 進法表記だと 101\operatorname{XOR}110=11 となります。)

制約

  • 1\leq T\leq 2\times 10^5
  • 0\leq L\leq R\lt 2^{60}

入力

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

T
\mathrm{test}_1
\mathrm{test}_2
\vdots
\mathrm{test}_T

ここで、\mathrm{test}_ii 番目のテストケースの情報を表し、次の形式で与えられます。

L R

出力

各テストケースに対する答えを改行区切りで順に出力してください。

それぞれのテストケースについて、総 XOR としてありえる整数の数を出力してください。


入力例 1

3
8 10
2 2
123 456

出力例 1

8
2
512

1 つめのテストケースについて説明します。総 XOR としてありえる整数は 0,1,2,3,8,9,10,118 つです。例えば、\lbrace 8,9,10\rbrace の部分集合として \lbrace 8,10\rbrace を選べば総 XOR が 2 になります。