Educational Codeforces Round 105 問題文和訳
- A. ABC String / Строка ABC
- B. Berland Crossword / Берляндский кроссворд
- C. 1D Sokoban / 1D Сокобан
- D. Dogeforces
- E. A-Z Graph / A-Z граф
- F. Delete The Edges / Уничтожение ребер
A. ABC String / Строка ABC
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
A
', 'B
', 'C
'のいずれかです。括弧列とは"(
"と")
"のみを含む文字列です。正規括弧列とは元の文字列に文字"1
"や"+
"を挿入することで正しい算術式に変換できるような括弧列です。例えば、括弧列"()()
"や"(())
"は正規括弧列であり(得られる表現式は"(1)+(1)
"や"((1+1)+1)
"になる)、")(
"や"(
"、")
"は正規括弧列ではありません。
次のような 文字からなる文字列 を見つけたいです。
- は正規括弧列である
- である について
言い換えれば、全ての出現する'A
', 'B
', 'C
'をそれぞれ同じ種類の括弧で置き換えたいのです。
このような文字列 が存在するかどうか判別してください。
入力
1行目には単一の整数 が与えられる、 はテストケースの個数である。
その後、 個のテストケースについての記述が続く。
各テストケースについての唯一の行には文字列 が与えられる。 は大文字の'A
', 'B
', 'C
'のみから成る。 の長さを とする。 が偶数であり、 であることは保証されている。
出力
各テストケースについて次のような文字列 が存在する場合、"YES
"と出力せよ。
- は正規括弧列である
- である について
そうでない場合、"NO
"と出力せよ。
どの文字も大文字小文字は好きなように出力してよい(例えば、文字列yEs
, yes
, Yes
, YES
はすべて肯定とみなされる)。
入出力例
4 AABBAC CACA BBBBAC ABCA
YES YES NO NO
注記
1つめのテストケースでの、可能な文字列 の1つは"(())()
"です。
2つめのテストケースでの、可能な文字列 の1つは"()()
"です。
B. Berland Crossword / Берляндский кроссворд
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
このパズルを解くために、次のように、グリッドの端にある行くとかのマスを黒く塗らなければなりません。
- 一番上の行のちょうど マスが黒
- 一番右の列のちょうど マスが黒
- 一番下の行のちょうど マスが黒
- 一番左の列のちょうど マスが黒
マスを全く黒く塗らず、全てのマスを白のままにしておくこともできることに注意してください。
与えられたパズルに解が存在するかどうかをチェックしてください。
入力
1行目には単一の整数 が与えられる、 はテストケースの個数である。
その後、 個のテストケースについての記述が続く。
各テストケースについての唯一の行には つの整数 が与えられる。
出力
各テストケースについて解が存在するなら"YES
"を、そうでないなら"NO
"を出力せよ。
どの文字も大文字小文字は好きなように出力してよい(例えば、文字列yEs
, yes
, Yes
, YES
はすべて肯定とみなされる)。
入出力例
4 5 2 5 3 1 3 0 0 0 0 4 4 1 4 0 2 1 1 1 1
YES YES NO YES
注記
テストケース についての可能解はこのようなものになります。
C. 1D Sokoban / 1D Сокобан
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
位置 からスタートします。直線上には 個の箱があり、 番目の箱は位置 にあります。全ての箱の位置は異なります。 箇所、特別な場所があり、 番目の特別な場所は位置 です。全ての特別な場所の位置は異なります。
1回の手で位置を1つだけ左右のどちらかに動くことができます。移動方向に箱が1箱ある場合はその箱をその方向の次の位置に押し込みます。その次の位置が他の箱に占有されている場合、その箱もその次の位置へ押され、その次も...となります。箱の中を通過することがはできません。箱を自分の方向へ引っ張ることもできません。
何手でも打つことができます(0回でもよい)。できるだけ多くの箱を目標は特別な位置に置くことです。最初から特別な場所に置かれている箱があるかもしれないことに注意して下さい。
入力
1行目には単一の整数 が与えられる、 はテストケースの個数である。
その後、 個のテストケースについての記述が続く。
各テストケースの1行目には2つの整数 が与えられる、それぞれ箱の個数と特別な場所の数である。
各テストケースの2行目には 個の異なる昇順の整数 が与えられる、これらは箱の初期位置である。
各テストケースの3行目には 個の異なる昇順の整数 が与えられる、これらは特別な場所の位置である。
全てのテストケースでの の和が を超えないことは保証されている。全てのテストケースでの の和も を超えないことは保証されている。
出力
各テストケースについて単一の整数を出力せよ、その整数とは特別な場所に置くことのできる箱の最大数である。
入出力例
5 5 6 -1 1 5 11 15 -4 -3 -2 6 7 15 2 2 -1 1 -1000000000 1000000000 2 2 -1000000000 1000000000 -1 1 3 5 -1 1 2 -2 -1 1 2 5 2 1 1 2 10
4 2 0 3 1
注記
1つ目のテストケースでは だけ右に進み、位置 にあった箱を位置 に、位置 にあった箱を位置 に押し込めます。それから だけ左に進み、位置 へ到達すると、箱を へ押し込むことができます、そうすると箱はそれぞれ位置 にあります。このうち、位置 は特別な位置であるので、答えは となります。
2つ目のテストケースでは箱の1つを から へ動かし、別の箱を から へ動かすことで答え を得ることができます。
3つ目のテストケースでは箱を引っ張ることはできないため、箱を特別な場所へ近づけることはできません。
4つ目のテストケースでは全ての箱がすでに特別な場所にあり、何もしないことで答え を得ることができます。
5つ目のテストケースでは箱よりも特別な場所の方が少ないです。右に か 進むことで箱を位置 に動かすことができます。
D. Dogeforces
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
会社の完全な構造は秘密ですが、下級従業員の数は知っていますし、各下級従業員の組について共通上司(そのような上司が複数いる場合は給料が一番低い上司)の給料は知られています。会社の構造を復元しなければなりません。
入力
1行目には単一の整数 が与えられます、これは下級従業員の数である。
行が続き、その 行目には 個の整数 が与えられます、これらは番号 の従業員の共通上司の給料である。 であることは保証されている。 は 番目の従業員の給料である。
出力
1行目には単一の整数 を出力せよ、これは会社の従業員数である。
2行目には 個の整数 を出力せよ、 は番号 の従業員の給料である。
3行目には単一の整数 を出力せよ、これは社長のである従業員の番号である。
つづく 行目には2つの整数 を出力せよ、これらはその従業員と直属の上司の番号である。
下級従業員の番号は から であり、残りの従業員について から の番号を振らなければならないことに注意せよ。正しい会社の構造が複数ある場合、そのいずれを出力してもよい。
入出力例
3 2 5 7 5 1 7 7 7 4
5 2 1 4 7 5 4 1 5 2 5 5 4 3 4
注記
1つ目の入出力例における可能な構造の1つは次のようなものがあります。
E. A-Z Graph / A-Z граф
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
このグラフについて 個のクエリを処理しなければなりません。各クエリは次の3種類のうちの1つです。
- "": のラベルのついた から への弧を追加する。この時点においてグラフ中に弧 ) が存在しないことは保証される
- "": から への弧を削除する。この時点においてグラフ中に弧 ) が存在することは保証される
- "": と の両方の歩道が存在し、その両方の歩道に沿った文字を書き下していくと同じ文字列が得られる 頂点の列 を求める。同じ頂点を何度でも訪れてよい
入力
1行目には2つの整数 が与えられる、これらはそれぞれ頂点数とクエリ数である。
つづく 行には1行につき1クエリが与えられる。各クエリは3種類のうちの1つである。
- "" は小文字のラテン文字
- ""
- ""
出力
各3種類目のクエリについて上述したような列 が存在する場合YES
と、そうでない場合NO
と出力せよ。
入出力例
3 11 + 1 2 a + 2 3 b + 3 2 a + 2 1 b ? 3 ? 2 - 2 1 - 3 2 + 2 1 c + 3 2 d ? 5
YES NO YES
注記
3種類目のクエリの1つ目 については、例えば、 であるため、列 と選ぶことができます。
3種類目のクエリの2つ目 については、弧 と が同じ文字を持つような列 は見つかりません。
3種類目のクエリの3つ目については、例えば、 であるため、列 と選ぶことができます。
F. Delete The Edges / Уничтожение ребер
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
任意の頂点を始点として選びそこから辺に沿って歩き始めることができます。辺に沿って歩くとき、その辺を破壊します。明らかに、辺が破壊されている場合、その辺に沿って歩くことはできません。
歩行中に1回までモード変更を行うことができ、この操作は頂点乗にいる時にしか行えません(辺上にいる場合は行えません)。モード変更後、辺は次のように錯押されます: モード変更後の1辺目は破壊されず、2辺目は破壊され、3辺目は破壊されず、4辺目は破壊され、... という具合です。元のモードに戻すことはできません。この操作をしたくなければ、しなくても構いません。
与えられたグラフの全ての辺を破壊することができるでしょうか?
入力
1行目には2つの整数 が与えられる、これらはそれぞれ頂点数と辺の本数である。
その後 行が続く、各行には2つの整数 が与えられる、これらは 番目の辺の端点である。
これらは多重辺のない連結無向グラフを形成する。
出力
全ての辺を破壊することが不可能な場合、0
と出力せよ。
そうでない場合、行動列を次のように出力せよ。まず、 を出力せよ、これは行動数である。次に 個の整数からなる列自身を出力せよ。1つ目の整数は支店のインデックスでなければならない。それぞれの次の整数は探索での次の頂点のインデックスか、モード変更を行った場合 でなければならない。モード変更は最大1回のみの使用が認められている。
入出力例
3 3 1 2 2 3 3 1
4 1 2 3 1
4 3 1 2 2 3 4 2
8 2 -1 1 2 3 2 4 2
5 5 1 2 2 3 3 1 2 4 2 5
9 2 3 1 2 -1 4 2 5 2
5 5 1 2 2 3 3 1 2 4 4 5
8 5 4 2 3 1 -1 2 1
6 5 1 2 2 3 3 4 4 5 3 6
0