alexjercan/bugnet huggingface dataset:
Problem M: Power Subsequences

Problem

添字が $1$ から始まり、長さが有限の数列を引数とする関数 $f$ を以下のように定義する。

$\displaystyle f(\{a_1, a_2, \ldots, a_n\}) = \sum_{i=1}^n {a_i}^i$

長さ $N$ の数列 $X = \{ x_1, x_2, \ldots, x_N \}$ が与えられるので、空の列を除く全ての部分列 $X'$ に対して $f(X')$ を求め、その総和を $998244353$ で割ったあまりを出力せよ。ただし、部分列の添字は、元の数列における相対的な序列を保ったまま $1$ から順に番号を振り直すものとする。また、ある2つの部分列が列として同じでも、取り出した位置が異なるならば、それらは別々に数えるものとする。

Input

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

$N$
$x_1$ $\ldots$ $x_N$

1行目に長さ $N$ が与えられる。
2行目に数列 $X$ の要素が空白区切りで与えられる。

Constraints

入力は以下の条件を満たす。

$1 \leq N \leq 10^6 $

$1 \leq x_i \leq 10^6 $

入力は全て整数である

Output

空の列を除く全ての部分列 $X'$ について $f(X')$ を求め、その総和を $998244353$ で割ったあまりを出力せよ。

Sample Input 1

3
1 2 3

Sample Output 1

64

$(1^1)+(2^1)+(1^1+2^2)+(3^1)+(1^1+3^2)+(2^1+3^2)+(1^1+2^2+3^3) = 64$

であるから、64を出力する。

Sample Input 2

5
100 200 300 400 500

Sample Output 2

935740429
A: 不思議な植物

問題

あるところに不思議な $X$ [cm] の植物が生えている.
この植物は以下の不思議な性質を持っている.

この植物に "nobiro" と声を掛けると, その植物は $A$ [cm] 成長する.

この植物に "tidime" と声を掛けると, その植物は $B$ [cm] 成長する.

この植物に "karero" と声をかけると, その植物は $0$ [cm] になる.

ただし, この植物は負の長さにはならないとする.
具体的には, $C$ [cm] の状態から $D$ [cm] $(C + D \lt 0)$ 成長するとき, 植物は $0$ [cm] になったときに成長が止まる.

この植物に $N$ 日間, 毎日一度だけ "nobiro", "tidime", "karero" のうちどれか
一つの言葉をかけた. $N$ 日後の植物の長さ [cm] を求めよ.

制約

入力値は全て整数である.

$0 \leq X \leq 100$

$-100 \leq A,B \leq 100$

$1 \leq N \leq 1000$

$S_i$ は "nobiro", "tidime" または "karero" のいずれかである.

入力形式

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

$X\ A\ B$

$N $

$S_1$

$S_2$

$\vdots$

$S_N$

出力

$N$ 日後の植物の長さを出力せよ. また末尾に改行を出力せよ.

サンプル

サンプル入力 1

10 30 10
3
nobiro
nobiro
tidime

サンプル出力 1

80

サンプル入力 2

10 -20 -30
1
nobiro

サンプル出力 2

0
B: Shortest Crypt

問題

xryuseixくんの学校では暗号が流行している. 格子状の街に住んでいるxryuseixくんは集合場所を決める新しい暗号を考えた.

暗号文は $N$ 文字の文字列 $S$ からなり, $S_i$ の文字によって現在地からの移動方向を決める. 移動方向に関しては以下の通りである.

A ~ M : 北に１マス進む.

N ~ Z : 南に１マス進む.

a ~ m : 東に１マス進む.

n ~ z : 西に１マス進む.

さて,ここでxryuseixくんは, yryuseiyちゃんにデートの集合場所を暗号文で教えようと思ったのだが, 暗号文が冗長なことに気づいた.

例えば,「ANA」という暗号文があったとしよう. これは北に $1$ マス進み, 南へ $1$ マス進んだのち北へ $1$ マス進む.
これは北に $1$ マス進む暗号文と等価なので,「ANA」＝「A」と, 簡潔にできる. xryuseixくんはyryuseiyちゃんに遠回りをさせないよう,暗号文を簡潔にしようと思った.

そこであなたはxryuseixくんに変わって, 暗号文を簡潔にするプログラムを書くことになった.
なお, 「暗号文を簡潔にする」とは,「元の暗号文と同じ目的地へ行く最も短い暗号文を作る」ということである.

制約

$N$ は整数であり, $S_i$ は大文字または小文字のアルファベットである.

$1 \leq N \leq 10^{5}$

入力形式

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

$N$

$S$

出力

$1$ 行目に簡潔にした後の暗号文の長さ, $2$ 行目にその暗号文を出力せよ.
答えとしてありうる暗号文が複数存在する場合, どれを出力してもよい.
また各行の末尾に改行を出力せよ.

サンプル

サンプル入力 1

5
ANazA

サンプル出力 1

1
A

サンプル入力 2

7
ACMICPC

サンプル出力 2

5
HIJKL

サンプル入力 3

4
AIZU

サンプル出力 3

0

簡潔にした暗号文(空の文字列)のあとに改行が必要なことに注意.
C: 同値命題

問題

$N$ 個の命題があり, それぞれ $1, 2, \cdots,N$ という名前がついている.

また, 命題に関する情報が $M$ 個与えられる. $i$ 番目の情報は「$a_i$ $b_i$」という形式で与えられ, これは $a_i$ ならば $b_i$ であることを表す.（「ならば」は論理包含であり、推移律が成り立つ）

各命題 $i$ に対して $i$ と同値な命題を全て昇順に出力せよ.

ただし命題 $i$ と命題 $i$ は常に同値である.

命題 $X$ と命題 $Y$ が同値とは,「$X$ ならば $Y$」かつ「$Y$ ならば $X$」のことである.

制約

入力値は全て整数である.

$ 2 \leq N \leq 300$

$ 1 \leq M \leq N(N - 1)$

$ a_i \neq b_i $

$1 \leq a_i, b_i \leq N $

入力形式

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

$N\ M$

$a_1\ b_1$

$a_2\ b_2$

$\vdots$

$a_M\ b_M$

出力

$i$ 行目には命題 $i$ と同値である命題を昇順に空白区切りですべて出力せよ. また, 各行の末尾に改行を出力せよ.

サンプル

サンプル入力 1

5 2
1 2
2 1

サンプル出力 1

1 2
1 2
3
4
5

サンプル入力 2

3 3
1 2
2 3
3 1

サンプル出力 2

1 2 3
1 2 3
1 2 3

サンプル入力 3

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

サンプル出力 3

1
2 6
3 4 5
3 4 5
3 4 5
2 6
D: Walking

問題

$1$ から $N$ の番号がつけられている $N$ 個の島がある.

それぞれの島は $N-1$ 個の橋によって、どの $2$ つの島も何本かの橋を渡って互いに移動することができる.

それぞれの橋には耐久度があり、入力が与えられた時点での $i$ 番目の橋の耐久度は $w_i$ である.

それぞれの島にはお宝が $1$ つずつ置いており、島に滞在しているときにお宝を拾うことができる.

現在島 $S$ にいるyebiくんは、島 $E$ にある博物館に全てのお宝を運びたい.

yebiくんは✝魔力✝を持っているので、島 $v$ に訪問するたびに、 $v$ から出る全ての橋の耐久度が $T$ 減少する.

橋の耐久度が $0$ 以下になったとき、橋は崩壊し、それ以降には渡ることができなくなる.

yebiくんは博物館に全てのお宝を届けることができるか？

ただし、yebiくんは力持ちなので同時にいくつでもお宝を持ち運ぶことができる.

制約

入力値は全て整数である

$2 \leq N \leq 10^5$

$1 \leq S, E \leq N$

$0 \leq T \leq 10^9$

$1 \leq w_i \leq 10^9$

$1 \leq a_i, b_i \leq N$

入力形式

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

$N\ T\ S\ E$

$a_1\ b_1\ w_1$

:

:

$a_{N-1}\ b_{N-1}\ w_{N-1}$

出力

博物館に全てのお宝を届けることができるなら "Yes"、そうでなければ "No" を出力せよ.

また、末尾に改行を出力せよ.

サンプル

サンプル入力 1

4 10 1 4
1 2 52
1 3 68
3 4 45

サンプル出力 1

Yes

サンプル入力 2

4 10 1 4
1 2 15
1 3 60
3 4 10

サンプル出力 2

No

サンプル入力 3

3 0 1 3
1 2 5
2 3 5

サンプル出力 3

Yes

yebiくんの魔力は貧弱すぎて、橋の耐久度を減らすことはできない.
E: モンスターバスター

問題

AORイカちゃんはモンスターバスターである.

ある日, 道を歩いていると寝ているモンスターに出会った.

闘争心が強いAORイカちゃんは,モンスターに寝起きの一撃をお見舞いすることに決めた.
しかし, 現在のAORイカちゃんの攻撃力は $0$ であり, このままではまともな攻撃ができない.

モンスターバスターの精進をしているAORイカちゃんは, 実は師匠から特殊な笛を託されていた.
この笛で特定の曲を吹くと一定時間攻撃力が上がるのである.

修行を積んだAORイカちゃんは $N$ 個の曲を吹くことができる.
$i$ 番目の曲は演奏に $R_i$ 秒かかり, 演奏終了後に攻撃力が $A_i$ だけ上昇する.
演奏終了から $T_i$ 秒後にこの演奏の効果は切れ, 演奏前の攻撃力に戻ってしまう.

また, AORイカちゃんは重ね演奏をすることができる.
演奏の効果時間中に同じ曲を演奏し終えると攻撃力が $A_i$ ではなく $W_i$ 上昇する.
重ね演奏は何回でもできるが効果時間は延長しない. そのため現在効果中の $i$ 番目の曲の最初にかけた効果が切れると重ね演奏の効果もすべて切れる.

AORイカちゃんの攻撃力の最大値を出力せよ.
なお, いくら演奏してもモンスターは起きないし, AORイカちゃんは $0.5$ 秒で攻撃できる.

制約

入力値は全て整数である.

$1 \leq N \leq 2000$

$-2000 \leq A_i, W_i \leq 2000$

$1 \leq R_i , T_i \leq 2000$

入力形式

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

$N$

$R_1\ A_1\ W_1\ T_1$

$\vdots$

$R_N\ A_N\ W_N\ T_N$

出力

AORイカちゃんの攻撃力の最大値を出力せよ. また, 末尾に改行も出力せよ.

サンプル

サンプル入力 1

2
5 10 5 5
4 4 2 2

サンプル出力 1

14

サンプル入力 2

2
5 10 5 11
8 8 2 1

サンプル出力 2

20
F: 友達探し

問題

$1$ から $N$ までの番号が付けられた $N$ 人の人に対して，ある部屋の入退室記録が $M$ 個与えられる．

$i$ 番目の入退室記録は $A_i\ B_i\ C_i$ の $3$ つの整数からなり，これは以下を示している．

$C_i = 1$ のとき，時刻 $A_i$ に $B_i$ さんが部屋に入室したことを表す.

$C_i = 0$ のとき，時刻 $A_i$ に $B_i$ さんが部屋から退室したことを表す.

$i$ 番目($1 \leq i \leq N$)の人について，時刻 $T$ までに部屋で一緒に過ごした時間が最も長い人を答えよ．

制約

入力値は全て整数である.

$2 \leq N,\ M \leq 10^5$

$1 \leq T \leq 10^9$

$1 \leq A_i \leq T$

$A_i \leq A_{i+1}$

$1 \leq B_i \leq N$

$(A_i = A_j$ かつ $B_i = B_j$) ならば $i=j$

$0 \leq C_i \leq 1$

時刻 $0$ には部屋に誰もいない

入退室が矛盾する入力は与えられない

部屋に $100$ 人より多くの人がいることはない

入力形式

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

$N\ M\ T$

$A_1\ B_1\ C_1$

…

$A_M\ B_M\ C_M$

出力

$i$ 行目には $i$ 番目の人について，時刻 $T$ までに部屋で一緒に過ごした時間が最も長い人を出力する．

ただし，自分以外で一緒に過ごした時間が最も長い人が複数人いる場合は，最も小さい番号の人を出力せよ．

また，各行の末尾に改行を出力せよ．

サンプル

サンプル入力 1

3 6 10
1 1 1
2 2 1
4 3 1
5 1 0
6 2 0
6 3 0

サンプル出力 1

2
1
2

サンプル入力 2

3 2 5
1 1 1
2 2 1

サンプル出力 2

2
1
1

$3$ 番目の人は，$1$ 番目の人とも $2$ 番目の人とも一緒にいた時間が $0$ なので，最も小さい $1$ を出力する.
G: AOR-String

問題

$N$ 個の文字列 $S_i$ が与えられる.

$S_i$ を任意の順に繋げて得られる文字列に含まれる "AOR" の数の最大値を求めよ.

制約

$1 \leq N \leq 10^5$

$1 \leq |S_i| \leq 20$

$S_i$ は大文字アルファベットのみからなる

入力形式

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

$N$

$S_1$

…

$S_N$

出力

$S_i$ を任意の順に繋げて得られる文字列に含まれる "AOR" の数の最大値を出力せよ. また, 末尾に改行も出力せよ.

サンプル

サンプル入力 1

2
AORA
OR

サンプル出力 1

2

サンプル入力 2

5
AB
CA
ORA
XX
AOR

サンプル出力 2

2
A: 間違い探し

問題

縦に N マス、横に M マスある長方形の盤面 A, B が与えられます。各盤面について、それぞれのマスは白または黒で塗られています。

盤面 X の i 行 j 列目のマスの色を C(i, j, X) と表記することにします。

以下の条件を満たす整数の組 (i, j) がいくつあるか数えてください。

1 \leq i \leq N

1 \leq j \leq M

C(i, j, A) \neq C(i, j, B)

入力形式

N M
A_1
...
A_N
B_1
...
B_N

A_i (1 \leq i \leq N) の j 文字目が # のときは C(i, j, A) が黒、. のときは C(i, j, A) が白であることを表します。B についても同様です。

制約

1 \leq N, M \leq 2,000

|A_i| = |B_i| = M

A_i, B_i は # と . のみからなる文字列

出力形式

答えを一行に出力してください。

入力例1

2 3
..#
##.
.##
#..

出力例1

2

入力例2

7 28
............................
...#.....###...####....###..
..#.#...#...#..#...#..#...#.
.#...#..#......####...#.....
.#####..#...#..#......#...#.
.#...#...###...#.......###..
............................
............................
..###....###.....##....###..
.#...#..#...#...#.#...#...#.
...##...#...#.....#....####.
..#.....#...#.....#.......#.
.#####...###....####...###..
............................

出力例2

40
B: テトリス

問題

縦 4 マス x 横 10 マスの長方形からなる盤面を考えます。
縦 1 マス x 横 1 マスぶんの正方形をブロックと呼びます。

ブロックを 4 つ繋げたものをテトロミノと呼び、以下の 7 種類（およびこれらに対して 90 度回転を任意回行ったもの）があります。

さて、盤面のうち 28 個のマスにブロックが置かれた状態を考えます。

左の図のように、各ブロック（赤色で表される）はマスに合うように置かれます。右の図のように半端な位置に置かれることはありません。

4 つのテトロミノ t_1, t_2, t_3, t_4 が与えられるので、このうちちょうど 3 つを選んですきな位置に置くことで、盤面全体にブロックが置かれた状態にできるか判定してください。

ただし、テトロミノを配置するにあたり、以下の条件をすべて満たさなければなりません。

ブロック同士が重なってはいけない。

与えられたテトロミノを回転させてはいけない。

各 i (1 \leq i \leq 4) について、テトロミノ t_i を 2 回以上使ってはいけない。

テトロミノの各ブロックは盤面の外に出てはいけない。

盤面が n 個与えられるので、各盤面についてこの判定を行い、盤面全体にブロックを置けるならば Yes、不可能ならば No を出力してください。

入力形式

t_1
t_2
t_3
t_4
n
B_1
…
B_n

はじめに、使えるテトロミノ t_1, t_2, t_3, t_4 が与えられます。
各 t_i (1 \leq i \leq 4) は以下の形式で与えられます。

h w
s_1
…
s_h

これはテトロミノを含む縦 h x 横 w マスの長方形であり、テトロミノの形状は s_1 … s_h で表されます。長方形のうち、テトロミノを表す部分は #、それ以外の部分は . で表されます。各長方形に # はちょうど 4 つ含まれます。. のみからなる行または列は存在しません。

次に、盤面の個数 n が与えられます。
その後、4\times 10 マスで表される盤面 B が n 個与えられます。
ブロックがある位置が #、ない位置が . で示されます。

制約

1\leq n\leq 10^5

与えられる各テトロミノは上で述べた条件に違反しない

各盤面について、# はちょうど 28 個存在する

たとえば、以下のようなテトロミノは与えられない。

3 3
..#
.#.
##.

（連結でないブロックがあり、これは上で述べたテトロミノの条件を満たさない）

3 3
...
.#.
###

（一番上の行が . のみからなる）

出力形式

n 行にわたって出力してください。i 行目には盤面 B_i に対する判定結果を Yes または No で出力してください。

入力例1

2 3
##.
.##
2 3
#..
###
1 4
####
2 3
###
.#.
2
####....##
####...###
####..####
####...###
###..#####
###...####
###...####
###....###

出力例1

Yes
Yes

t_1, t_2, t_3, t_4 に相当するテトロミノが置かれる場所をそれぞれ 1, 2, 3, 4 で示すと、各盤面は次のように敷き詰められます。

####3333##
####444###
####24####
####222###

###11#####
###211####
###222####
###3333###

各盤面について、別々のテトロミノを選んで構いません。

入力例2

1 4
####
1 4
####
2 2
##
##
2 2
##
##
4
######....
....######
#######..#
#######..#
....######
######....
....######
##########
######.#.#
######.#.#
##..##.#.#
##..##.#.#
##.###.#.#
#.#.###.##
#.#.###.##
##.###.#.#

出力例2

Yes
No
No
No

#### が足りないため、2 つ目の盤面をブロックで敷き詰めることはできません。

また、テトロミノを回転させることはできないので、3 つ目の盤面を敷き詰めることもできません。

また、4 つ目の盤面のようなブロックの配置の仕方もありえることに注意してください。すなわち、入力で与えられる盤面はテトロミノを組み合わせて作られる盤面とは限りません。
C: カニサル暗号

問題

えびちゃんは、ある非負整数 D を「カニサル暗号」で暗号化して得られた文字列 C を与えられました。この暗号は、非負整数を 10 進法で表したときの各数字をある（元と異なるとは限らない）決められた数字で置き換えるものです。異なる数字が同じ数字に置き換えられたり、同じ数字が出現位置によって異なる数字に書き換えられることはありません。

たとえば、この暗号化方式によって 2646 が 0545 になることはありますが、3456 が 1333 になったり 1333 が 3456 になることはありません。

いま、えびちゃんは D を 10^9+7 で割った余りが M になることを教えてもらいました。このとき、D として考えられるものを一つ出力してください。複数考えられる場合はどれを出力しても構いません。ただし、D の先頭には余分な 0 はついていないものとします。

入力形式

M
C

制約

0\leq M < 10^9+7

1\leq |C| \leq 10^5

出力形式

D として考えられる非負整数を一行に出力してください。存在しない場合は -1 を出力してください。

入力例1

2
1000000007

出力例1

1000000009

今回の暗号化方式は、0 を 0 に、1 を 1 に、9 を 7 に置き換えるものでした。

入力例2

3
1000000007

出力例2

-1

入力例3

1
01

出力例3

-1

D の先頭に余分な 0 がついていることはありません。

入力例4

45
1000000023

出力例4

6000000087

1000000052 や 2000000059 なども条件を満たすので、それを出力してもかまいません。

入力例5

0
940578326285963740

出力例5

123456789864197523
D: Many Decimal Integers

問題

数字 (0 から 9) のみからなる文字列 S と、数字 と ? のみからなる文字列 T が与えられます。S と T は同じ長さです。

T 内に存在するそれぞれの ? について、0 から 9 までの数字のいずれか 1 つに変更し、数字のみからなる文字列 T' を作ることを考えます。このとき、f(T') \leq f(S) である必要があります。ここで f(t) は、文字列 t を 10 進数として読んだときの整数値を返す関数とします。
また、T' の最上位の桁にある数字は 0 であってもよいものとします。

あり得る文字列 T' すべてについて、f(T') の値の総和を 10^9+7 で割った余りを求めてください。なお、条件を満たす T' がひとつも存在しない場合は 0 と答えてください。

入力形式

S
T

制約

1 \leq |S| = |T| \leq 2 \times 10^5

S は数字 (0 から 9) のみからなる文字列

T は数字と ? のみからなる文字列

出力形式

条件を満たす T' の総和を 10^9+7 で割った余りを一行に出力してください。

入力例1

73
6?

出力例1

645

T' としてあり得る文字列は、60 から 69 までの 10 通りあります。これらの合計は 645 です。

入力例2

42
?1

出力例2

105

T' の最上位の桁にある数字は 0 でもよいため、01 も条件を満たします。

入力例3

1730597319
16??35??8?

出力例3

502295105

10^9 + 7 で割った余りを求めてください。
E: 総和の切り取り

問題

えびちゃんは数列 (a_1, a_2, ..., a_n) を持っています。
えびちゃんは（空でもよい）部分配列の総和の最大値が気になるので、それを求めてください。
ここで、部分配列とは連続する部分列を指します。なお、空列の総和は 0 とします。

さらに、えびちゃんがこの数列を q 回書き換えるので、各書き換えの直後にこの値を求めてください。

入力形式

n q
a_1 a_2 ... a_n
k_1 x_1
...
k_q x_q

各 k_j, x_j (1 \leq j \leq q) は、a_{k_j} を x_j に書き換えることを意味します。
各書き換えは独立ではなく、その後の処理において配列は書き換えられたままであることに注意してください。

制約

1\leq n\leq 10^5

1\leq q\leq 10^5

1\leq k_j\leq n

|a_i|, |x_j| \leq 10^9

出力形式

q+1 行出力してください。1 行目には書き換えを行う前の、1+i 行目には i 回目の書き換えの直後の部分配列の総和の最大値を出力してください。

入力例1

5 2
1 2 -3 4 -5
3 3
2 -6

出力例1

4
10
7

部分配列 (a_l, …, a_r) を a[l, r] と表すことにすると、書き換え前は a[1, 4] および a[4, 4] の総和が 4 で、これが最大です。

1 回目の書き換えの後、数列は (1, 2, 3, 4, -5) となり、総和の最大値は a[1, 4] の 10 です。

2 回目の書き換えの後、数列は (1, -6, 3, 4, -5) となり、総和の最大値は a[3, 4] の 7 です。

入力例2

3 1
-1 -2 -3
1 1

出力例2

0
1

空列の総和は 0 であり、書き換え前はそれが最大です。
F: 部分文字列分解

問題

2 つの文字列 S と T および整数 k が与えられる。
T の長さ k 以上の連続する部分文字列を考えたとき、それらの連結で S を構成できるか判定せよ。

ここで文字列 s = s_1 s_2 ... s_n の連続する部分文字列 s[l, r] = s_l s_{l+1} ... s_r (1 \leq l \leq r \leq n) とは、s の l 文字目から r 文字目までを切り出してできる文字列を指し、その長さは r - l + 1 である。

入力形式

S
T
k

制約

S と T は小文字アルファベットからなる

1 \leq |S|, |T| \leq 2\times 10^5

1 \leq k \leq |T|

出力形式

S を構成できるとき Yes を、そうでないとき No を一行に出力せよ。

入力例1

abracadabra
cadabra
4

出力例1

Yes

T の長さ 4 以上の部分文字列である abra と cadabra を連結させることで abracadabra が構成でき、これは S と等しい文字列である。

入力例2

abcd
zcba
1

出力例2

No

入力例3

abc
zcba
1

出力例3

Yes

入力例4

abcdefg
abcddefg
4

出力例4

No
G: Restricted DFS

問題

N 頂点 N-1 辺からなる、自己ループや多重辺が存在しない無向木 G がある。頂点はそれぞれ 1 から N まで番号付けされており、辺もそれぞれ 1 から N-1 まで番号付けされており、i 番目の辺は u_i と v_i を結んでいる。また、i 番目の頂点には非負整数 A_i がそれぞれ割り当てられている。

この木に対して、根 r から以下の擬似コードにしたがって DFS (深さ優先探索) を行うことを考える。

// [input]
// G: dfs の対象となるグラフ
// A: それぞれの頂点に割り当てられた非負整数
// v: dfs を開始する頂点
// step: ステップ数を記録する整数

// [output]
// 以下のうちどちらかの二値
// - SUCCESS: dfs が途中で終了することなく、頂点 v まで戻ってくる
// - FAILURE: dfs が途中で終了する

function dfs(G, A, v, step)
if (A[v] が 0 である) then
return FAILURE

A[v] ← A[v] - 1
step ← step + 1
v の子を頂点番号が小さい順にソート

// c は頂点番号が小さい順に見られる
for each (v の子 c) do
if (dfs(G, A, c, step) が FAILURE である) then
return FAILURE

if (A[v] が 0 である) then
return FAILURE

A[v] ← A[v] - 1
step ← step + 1

return SUCCESS

つまり、与えられた G と A に対して、根 r について

dfs(G, A, r, 0)

を実行することを考える。

それぞれの頂点を根としたときの、この DFS のステップ数を求めよ。

入力形式

N
A_1 ... A_N
u_1 v_1
...
u_{N-1} v_{N-1}

1 行目では、与えられるグラフの頂点数 N が与えられる。

2 行目は N 個の整数からなる。i 個目の整数 A_i は、i 番目の頂点に書かれている値を表す。

3 行目から N+1 行目までは、与えられるグラフの辺の情報が与えられる。u_i, v_i は、頂点 u_i と頂点 v_i を結ぶ無向辺がグラフ中に存在することを表す。

制約

1 \leq N \leq 3 \times 10^5

0 \leq A_i \leq 10^9

1 \leq u_i < v_i \leq N

与えられるグラフは木であることが保証される

入力は全て整数で与えられる

出力形式

N 行出力せよ。i 行目には、頂点 i を根としたときのステップ数を出力せよ。

入力例1

3
1 2 3
1 2
1 3

出力例1

2
3
3

1 番目の頂点を根としたとき

頂点 1 (A_1: 1 → 0) → 頂点 2 (A_2: 2 → 1) → 頂点 1 (A_1 が 0 であるため、頂点 1 に訪れることなく終了する)

2 番目の頂点を根としたとき

頂点 2 (A_2: 2 → 1) → 頂点 1 (A_1: 1 → 0) → 頂点 3 (A_3: 3 → 2) → 頂点 1 (A_1 が 0 であるため、頂点 1 に訪れることなく終了する)

3 番目の頂点を根としたとき

頂点 3 (A_3: 3 → 2) → 頂点 1 (A_1: 1 → 0) → 頂点 2 (A_2: 2 → 1) → 頂点 1 (A_1 が 0 であるため、頂点 1 に訪れることなく終了する)

よって、答えはそれぞれ 2, 3, 3 となる。はじめに根から出発するときも A_i の値を減らすことに注意せよ。

入力例2

3
1 2 3
1 2
2 3

出力例2

4
4
5
Min Element

数列a_1,a_2,..,a_Nが与えられます。

この数列の最小値の番号を求めてください。

最小値が複数の場所にあるときは、番号の最も小さいものを答えてください。

入力

N
a_1 a_2...a_N

出力

a_iが数列の最小値となるようなiのうち、最も小さいものを出力せよ。

制約

1 \leq N \leq 10^5

1 \leq a_i \leq 10^9

入力例

6
8 6 9 1 2 1

出力例

4
Set

数列a_1,a_2,..,a_Nが与えられます。

この数列に値は何種類ありますか。

入力

N
a_1 a_2...a_N

出力

数列の値の種類数を出力せよ。

制約

1 \leq N \leq 10^5

1 \leq a_i \leq 10^9

入力例

6
8 6 9 1 2 1

出力例

5
Range Count Query

数列a_1,a_2,..,a_Nが与えられます。

クエリでは、値がl以上r以下の項の個数を答えてください。

入力

N Q
a_1 a_2...a_N
l_1 r_1
l_2 r_2
:
l_q r_q

出力

ans_1
ans_2
:
ans_q

i行目には、i番目のクエリに対する答え、すなわちl_i \leq a_j \leq r_iなるjの個数を出力せよ。

制約

1 \leq N,Q \leq 10^5

1 \leq a_i \leq 10^9

1 \leq l_i \leq r_i \leq 10^9

入力例

6 3
8 6 9 1 2 1
2 8
1 7
3 5

出力例

3
4
0
K Average Ranges

数列a_1,a_2,..,a_Nが与えられます。

この数列に値の平均がK以上の長さ1以上の区間はいくつありますか。

入力

N K
a_1 a_2...a_N

出力

答えを出力せよ。

制約

1 \leq N \leq 10^5

1 \leq K \leq 10^9

1 \leq a_i \leq 10^9

入力例

6 6
8 6 9 1 2 1

出力例

7
Range Min of Max Query

整数の組の列(a_1,b_1), (a_2,b_2),..,(a_N,b_N)が与えられます。

二種類のクエリを処理してください。

一種類目のクエリでは、a_L,a_{L+1},..,a_RにXを加算します。

二種類目のクエリでは、max(a_L,b_L),max(a_{L+1},b_{L+1}),..,max(a_R,b_R)の最小値を求めます。

入力

N Q
a_1 b_1
a_2 b_2
:
a_N b_N
query_1
query_2
:
query_Q

i番目のクエリが一種類目のクエリの場合、query_iは1 L_i R_i X_iとなります。

i番目のクエリが二種類目のクエリの場合、query_iは2 L_i R_iとなります。

出力

ans_1
ans_2
:
ans_k

二種類目のクエリに対する答えを順に出力せよ。

制約

1 \leq N,Q \leq 10^5

1 \leq a_i,b_i \leq 10^9

1 \leq L_i \leq R_i \leq N

-10^9 \leq X_i \leq 10^9

入力例

6 6
8 1
6 1
9 4
1 5
2 1
1 4
2 1 3
1 1 3 3
2 1 3
2 4 6
1 4 6 3
2 4 6

出力例

6
9
2
4
Zero AND Subsets

非負整数の多重集合a_1,a_2,..,a_Nが与えられます。

この集合の空でない部分集合であって、値のbitwiseANDが0になるものはいくつありますか。

答えを10^9+7で割った余りを求めてください。

入力

N
a_1 a_2...a_N

出力

答えを10^9+7で割った余りを出力せよ。

制約

1 \leq N \leq 10^5

0 \leq a_i \leq 2^{20}-1

入力例

6
8 6 9 1 2 1

出力例

51
Bichrome Tree Connectivity

木が与えられます。

はじめ、すべての頂点は白いです。

白い頂点の色を反転すると黒になり、黒い頂点の色を反転すると白になります。

二種類のクエリを処理してください。

一種類目のクエリでは、頂点vの色を反転します。

二種類目のクエリでは、白い頂点vから白い頂点とそれらを結ぶ辺だけを使ってたどり着ける頂点の個数を答えます。

入力

N Q
a_1 b_1
a_2 b_2
:
a_{n-1} b_{n-1}
t_1 v_1
t_2 v_2
:
t_q v_q

t_iが1のとき一種類目のクエリ、2のとき二種類目のクエリであることを表す。

出力

ans_1
ans_2
:
ans_k

二種類目のクエリに対する答えを順に出力せよ。

制約

1 \leq N,Q \leq 10^5

1 \leq a_i,b_i \leq N

1 \leq t_i \leq 2

1 \leq v_i \leq N

与えられるグラフは木である。

t_i=2のとき、頂点v_iは必ず白である。

入力例

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

出力例

5
1
Queries with Six Inequeties

四つの整数の組(a,b,c,d)の集合が与えられます。

j番目のクエリでは、x_j < a_i < y_j < b_iかつz_j < c_i < w_j < d_iなるiが存在するか判定します。

入力

N Q
a_1 b_1 c_1 d_1
a_2 b_2 c_2 d_2
:
a_n b_n c_n d_n
x_1 y_1 z_1 w_1
x_2 y_2 z_2 w_2
:
x_q y_q z_q w_q

出力

ans_1
ans_2
:
ans_q

j行目には、j番目のクエリに対する答えを出力せよ。

条件を満たす添字iが存在するならYes、存在しないならNoを出力する。

制約

1 \leq N,Q \leq 10^5

1 \leq a_i < b_i \leq 10^5

1 \leq c_i < d_i \leq 10^5

1 \leq x_j < y_j \leq 10^5

1 \leq z_j < w_j \leq 10^5

入力例

2 2
14 86 9 121
3 34 3 34
1 14 5 14
1 9 1 9

出力例

No
Yes
アルミ缶の上にあるミカン (Oranges on Cans)

square1001 君は、テーブルにアルミ缶を $N$ 缶置きました。

E869120 君は、テーブル上のそれぞれのアルミ缶の上に $M$ 個ずつミカンを乗せました。

アルミ缶の上に乗っているミカンは全部で何個ありますか？

入力

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

$N$ $M$

出力

アルミ缶の上に乗っているミカンの数を 1 行で出力してください。

ただし、最後には改行を入れること。

制約

$1 \leq N \leq 9$

$1 \leq M \leq 9$

入力は全て整数である。

入力例1

3 4

出力例1

12

入力例2

7 7

出力例2

49
走れ双子 (Run, Twins)

E869120君は、家から学校へ向かって分速 $P$ メートルで走り出しました。

square1001君は、E869120君が家を出発してから $A$ 分後にE869120君の忘れ物に気が付き、分速 $Q$ メートルで追いかけました。

その後、E869120君は、E869120君が家を出発してから $B$ 分後に忘れものに気が付き、分速 $R$ メートルで道を引き返しました。

E869120君が家を出発してから何分後に双子は出会うでしょうか？

ただし、$B$ 分後までにE869120君とsquare1001君が出会うことはありません。

また、E869120君とsquare1001君の家から学校までは一本道であり、近道や別の道はないものとします。

入力

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

$A$ $B$
$P$ $Q$ $R$

出力

E869120君が家を出発してからE869120君とsquare1001君が出会うまでの時間を出力せよ。

ただし、最後には改行を入れること。

なお、想定解答との絶対誤差又は相対誤差が $10^{-3}$ 以内であれば正解として扱われる。

制約

$1 \leq A \leq B \leq 100$

$1 \leq Q \leq P \leq 100$

$1 \leq R \leq 100$

入力は全て整数である。

入力例1

14 86
9 1 20

出力例1

119.428571428571

入力例2

1 4
15 9 2

出力例2

7.000000000000

入力例3

67 87
7 4 51

出力例3

96.618181818182
今日の乱数 (Today's Random Number)

E869120 君は、「今日の乱数」というキャンペーンをN日間行いました。これは、毎日 1 回乱数を生成し、その値をツイッターに投稿するという企画です。

$1, 2, 3, \dots, N$ 日目の「今日の乱数」は、それぞれ $A_1, A_2, A_3, \dots, A_N$ でした。

E869120 君は、今日の乱数の値が昨日の乱数の値よりも高ければ嬉しくなります。

$N$ 日間のなかで、E869120 君は何回「今日の乱数」によって嬉しくなったでしょうか？

入力

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

$N$
$A_1$ $A_2$ $A_3$ $\dots$ $A_N$

出力

$N$ 日間のなかで、E869120 君が「今日の乱数」によって嬉しくなった回数を、1 行で出力してください。

ただし、最後には改行を入れること。

制約

$1 \leq N \leq 100000 \ (= 10^5)$

$1 \leq A_i \leq 1000000000 \ (= 10^9)$

入力は全て整数である。

入力例1

5
8 6 9 1 20

出力例1

2

3 日目と 5 日目にE869120君は嬉しさを感じます。

入力例2

6
3 3 4 3 3 4

出力例2

2

3 日目と 6 日目にE869120君は嬉しさを感じます。

入力例3

10
10 9 8 7 6 5 4 3 2 1

出力例3

0

E869120君が「今日の乱数」によって嬉しくなることはありません。
増えるE869120君 (Ninja E869120)

E869120君は分身が得意です。

ここに、$N$ 人のパ研部員がいます。しかし、このうちの何人かが E869120 君かもしれません。

そこで、あなたは $N$ 人全てのパ研部員に名前を聞きました。その結果、$N$ 人の部員はそれぞれ $S_1, S_2, S_3, \dots, S_N$ と名乗りました。

E869120 君は何人に分身していたでしょうか？ただし、全てのパ研部員は正直に自分の名前を答えるものとします。

入力

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

$N$
$S_1$
$S_2$
$S_3$
$\ldots$
$S_N$

出力

E869120君が何人に分身していたか、その人数を出力してください。ただし、E869120君がいない場合は「0」と出力してください。

ただし、最後には改行を入れること。

制約

$1 \leq N \leq 1000$

$1 \leq (S_i$ の長さ$) \leq 100$

$N$ は整数である。

$S_i$ は数字とアルファベット大文字からなる文字列である。

入力例1

5
E869120
TMJN
E869120
TAISA
YNYMXIAOLONGBAO

出力例1

2

E869120君は 2 人に分身しています。

入力例2

3
SQUARE1001
MENCOTTON
B2563125

出力例2

0

E869120君がいないときは0を出力してください。

入力例3

6
E8691200
E869121
E869122
E869123
E869124
E869125

出力例3

0

偽者に注意してください。
ギャグ (Gag)

Segtree 君は $N$ 個の「ギャグ」を持っていて、それぞれに「できばえ」 $V_i$ という値が定まっています。

Segtree 君は自由な順番で全てのギャグを公開することにしました。

ここで、 $i$ 番目のギャグを $j$ 番目に公開した時に得られる「うれしさ」は $V_i - j$ と表されます。

Segtree 君が得られる「うれしさ」の和の最大値を求めてください。

入力

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

$N$
$V_1$ $V_2$ $\ldots$ $V_N$

出力

「うれしさ」の和の最大値を出力してください。ただし、値が 32bit 整数に収まるとは限りません。

最後には改行を入れること。

制約

$1 \leq N \leq 10^5$

$1 \leq V_i \leq 10^5$

入力は全て整数である。

入力例1

1
59549

出力例1

59548

入力例2

5
2 1 8 5 7

出力例2

8
競り (Auction)

square1001君はとある競りを鑑賞していました。

競りとは、買い手が多数で品数に制限があるとき、高値を付けたものに買う権利を与える仕組みの取引です。(新明解国語辞典第七版より)

ここでの競りのルールは以下の通りです。

1. 次の 2. ～ 6. を品物が尽きるまで繰り返す

2. 新たな品物を出し、客に見せる

3. 客のうちの 1 人が好きな値段を品物につける

4. 客のうちの 1 人が現在品物についている値段よりも高い値段をつける

5. 4. の行為を行う客がいなくなるまで 4. を繰り返す

6. 品物に一番高い値段を付けた客がそれを落札する

square1001君はこの競り中に品物につけられた値段を時間順に全て記録しました。

その記録によると、$N$ 回品物に値段がつけられ、つけられた値段は最初から順に $A_1, A_2, A_3, \dots, A_N$ です。

E869120君はこの競りで何個の品物が出品されたか気になっています。

square1001君が作ったリストから、この競りで出品された品物の個数としてありうる最小値と最大値を求めてください。

入力

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

$N$
$A_1$ $A_2$ $A_3$ $\cdots$ $A_N$

出力

この競りで出品された品物の個数としてありうる最小値と最大値をこの順で改行区切りで出力してください。

ただし、最後には改行を入れること。

制約

$1 \leq N \leq 100000 \ (= 10^5)$

$1 \leq A_i \leq 1000000000 \ (= 10^9)$

入力は全て整数である。

入力例1

5
8 6 9 1 20

出力例1

3
5

3 つの品物が順に、値段 8、値段 9、値段 20 で落札されたとき、品物の個数は最小値 3 となります。

入力例2

6
3 3 4 3 3 4

出力例2

4
6

入力例3

8
5 5 4 4 3 3 2 2

出力例3

8
8
コンテストTシャツ (Contest T-shirts)

Segtree 君は、 $M$ 枚のコンテストTシャツを持っています。

彼は今から $N$ 日間、コンテストTシャツだけで過ごそうと考え、$i = 1, 2, 3, \dots, N$ に対して「 $i$ 日目に $A_i$ 枚目のTシャツを着る」という $N$ 個の計画を立てました。

しかし、今の計画のままだと洗濯が間に合わない可能性があるので、必要に応じて計画を変更し、2日連続で同じ服を着ないようにしたいです。

変更する必要のある計画の個数の最小値を求めてください。なお、与えられた制約の元で、計画の変更によって必ず条件を満たすようにできることが証明できます。

入力

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

$M$ $N$
$A_1$ $A_2$ $\ldots$ $A_N$

出力

変更する必要のある計画の個数の最小値を出力してください。

ただし、最後には改行を入れること。

制約

$2 \leq M \leq 10^9$

$1 \leq N \leq 10^5$

$1 \leq A_i \leq M$

入力は全て整数である。

入力例1

2 3
2 2 1

出力例1

1

入力例2

3 6
1 1 1 2 2 3

出力例2

2
たしざんひきざん (Calculation Training)

square1001 君は E869120 君に、誕生日プレゼントとして二つの数字 $A$ と $B$ をプレゼントしました。

E869120 君はこの二つの数字を使って、計算トレーニングをすることにしました。

具体的には、E869120君は次の操作をちょうど $N$ 回これらの数に行います。

奇数回目の操作のとき、$A$ を $A-B$ で置き換える

偶数回目の操作のとき、$B$ を $A+B$ で置き換える

E869120君が $N$ 回の操作をした後、$A$ と $B$ の値がそれぞれいくつになっているか求めてください。

入力

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

$N$
$A$ $B$

出力

E869120君が $N$ 回の操作をした後の $A$ と $B$ の値を、この順に空白区切りで出力してください。

ただし、最後には改行を入れること。

制約

$1 \leq N \leq 1000000000000000000 \ (= 10^{18})$

$1 \leq A \leq 1000000000 \ (= 10^9)$

$1 \leq B \leq 1000000000 \ (= 10^9)$

入力は全て整数である。

入力例1

3
3 4

出力例1

-4 3

$(A, B)$ の値は $(3,4) → (-1,4) → (-1,3) → (-4,3)$ と変化します。

入力例2

8
6 9

出力例2

3 -6
賞金 (Prize)

Segtree くんは、 $N$ 人のチームでプログラミングコンテストに出場し、 $K$ 円の賞金を得ました！今、この賞金を分配しようとしています。

Segtree くんを含む $N$ 人のチームメンバーそれぞれには、実力順に $1$ から $N$ までの番号がつけられています。Segtree くんは $1$ 番です。

$i$ 番のチームメイト $(i \geq 2)$ の得る賞金額が「$i - 1$ 番のチームメイトの得た賞金額の半分を整数に切り捨てた値」より少ないと、その人は怒ってしまいます。

怒る人が一人もいないように $K$ 円の賞金を分配するとき、Segtree くんがもらえる賞金の最大値を求めてください。

入力

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

N K

出力

Segtree くんがもらえる賞金の最大値を出力してください。

ただし、最後には改行を入れること。

制約

$1 \leq N,K \leq 10^{18}$

入力は全て整数である。

入力例1

1 1

出力例1

1

入力例2

819875141880895728 349993004923078537

出力例2

174996502461539284
地震 (Earthquakes)

E869120 君は地震が苦手です。

具体的には、ある作業をしている時に震度 $p$ の地震が発生した際、その作業のパフォーマンスが $10 \times p$ パーセント低下します。

昨日、$N$ 回地震が発生しました。より具体的に言うと、昨日の i 回目の地震は時刻 $T_i$ に発生し、その震度は $A_i$ でした。

ここで $Q$ 個の質問が与えられます。$i$ 個目の質問の内容は以下の通りです。

E869120 君が時刻 $L_i$ から時刻 $R_i$ まで作業をした時、最終的な作業のパフォーマンスの値はいくつになるでしょうか？

ただし、作業開始時のパフォーマンスは $1000000000 \ (= 10^9)$ であり、地震以外に作業のパフォ―マンスに影響を及ぼすものはないものとします。

また、作業開始時、終了時と同時に地震が発生していることはありません。

入力

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

$N$
$T_1$ $A_1$
$T_2$ $A_2$
$T_3$ $A_3$
$\ldots$
$T_N$ $A_N$
$Q$
$L_1$ $R_1$
$L_2$ $R_2$
$L_3$ $R_3$
$\ldots$
$L_Q$ $R_Q$

出力

質問 $1, 2, 3, \dots, Q$ の答えをこの順に改行区切りで出力しなさい。

ただし、最後には改行を入れること。

なお、想定解答との絶対誤差又は相対誤差が $10^{-7}$ 以内ならば正解と判定される。

制約

$1 \leq N \leq 100000 \ (= 10^5)$

$1 \leq Q \leq 100000 \ (= 10^5)$

$0 \leq A_i \leq 7$

$1 \leq T_1 < T_2 < \cdots < T_N \leq 1000000000 \ (= 10^9)$

$1 \leq L_i < R_i \leq 1000000000 \ (= 10^9)$

作業開始時刻ちょうどや作業終了時刻ちょうどに、地震が発生するような入力は与えられない。

入力は全て整数である。

入力例1

3
3 3
5 4
8 1
2
1 4
4 9

出力例1

700000000.000000000000
539999999.999999880791

どの質問に対しても、出力された値が実際の答えの値との絶対誤差または相対誤差が $10^{-7}$ 以内であれば、正解と判定されます。

入力例2

3
3 1
41 5
92 6
2
5 35
8 97

出力例2

1000000000.000000000000
200000000.000000059605

入力例3

10
176149409 6
272323398 6
280173589 0
374879716 5
402263621 5
498152735 0
639318228 6
641750638 3
764022785 2
939252868 5
10
40529600 224871240
537110257 584835100
409292125 704323206
674752453 740931787
511335734 793975505
320036645 530705208
527941292 660218875
326908007 473745741
428255750 654430923
590875206 623136989

出力例3

400000000.000000000000
1000000000.000000000000
280000000.000000059605
1000000000.000000000000
224000000.000000089407
250000000.000000000000
280000000.000000059605
250000000.000000000000
280000000.000000059605
1000000000.000000000000