Educational Codeforces Round 106 問題文和訳
- A. Domino on Windowsill / Домино на подоконнике
- B. Binary Removals / Двоичные удаления
- C. Minimum Grid Path / Минимальный путь на поле
- D. The Number of Pairs / Количество пар
- E. Chaotic Merge / Хаотичное слияние
- F. Diameter Cuts / Разрезы диаметров
- G. Graph Coloring / Раскраска графа
A. Domino on Windowsill / Домино на подоконнике
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
1行目の最初の セルと2行目の最初の セルが白で塗られています。その他のセルは黒で塗られています。
枚の白いドミノ( タイルで、両方のセルが白で着色されている)と 枚の黒いドミノ( タイルで、両方のセルが黒で着色されている)があります。
白いドミノは盤面のその下の2つのセルに他のドミノが置かれておらず、両方のセルが白である場合、盤面に置くことができます。同様に、黒いドミノはその下の2つのセルに他のドミノが置かれておらず、両方のセルが黒である場合、盤面に置くことができます。
ドミノを縦にも横にも置くことができるとすれば、 枚のドミノを全て置くことができるでしょうか?
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースの1行目には3つの整数 が与えられる。
各テストケースの1行目には2つの整数 が与えられる。
出力
各テストケースについて、 個のドミノを全て盤面に置くことができればYES
と、そうでなければNO
と出力せよ。
各文字について大文字で出力しても小文字で出力してもよい(それゆえ、例えば、文字列yEs
, yes
, Yes
, YES
は全て肯定の答えとして認識される)。
入出力例
5 1 0 1 1 0 1 1 1 0 0 3 0 0 1 3 4 3 1 2 2 5 4 3 3 1
NO YES NO YES YES
注記
1つ目のテストケースでは です。これは の盤面には黒のセル と白のセル があることを表します。白いセルが1つしかないので、白いドミノを置くことができません。
2つ目のテストケースでは同じ大きさ の盤面ですがどちらのセルも白です。 なので 枚のドミノを置くことができます。
3つ目のテストケースでは盤面は ですが、全て黒で塗られている( であるため)ので、白いドミノを置くことができません。
4つ目のテストケースではセル が白で、そのほかのセルは黒です。 枚の白いドミノを位置 と に、 枚の黒いドミノを位置 と に置くことができます。
B. Binary Removals / Двоичные удаления
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
0
'と'1
'のみから成る文字列 が与えられます。 の長さを とします。ある整数 を選び、次のような長さ の数列 を求めて下さい。
- から までの全ての について
位置 の文字は削除され、残りの文字を順序を変えずに連結します。つまり、配列 の位置が隣接してはいけません。
この結果得られる文字列を とします。 から の全ての について であるとき はソートされているといいます。
得られる文字列 がソートされているような配列 は存在するでしょうか?
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
その後、 個のテストケースについての記述が続く。
各テストケースについての唯一の行には文字列 が与えられる。各文字は'0
'か'1
'のいずれかである。
出力
各テストケースについて位置 の文字を取り除き、順番を変えずに連結することで、ソートされている文字列が得られるような配列 が存在する場合、"YES
"と出力せよ。
そうでない場合、"NO
"と出力せよ。
各文字について大文字で出力しても小文字で出力してもよい(それゆえ、例えば、文字列yEs
, yes
, Yes
, YES
は全て肯定の答えとして認識される)。
入出力例
5 10101011011 0000 11111 110 1100
YES YES YES YES NO
注記
1つ目のテストケースでは列 を選ぶことができます。"10101011011
"から下線附きの文字を取り除くと文字列"0011111
"ができ、これはソートされています。
2つ目と3つ目のテストケースでは列は既にソートされています。
4つ目のテストケースでは列 を選ぶことができます。 "11
"となり、これはソートされています。
5つ目のテストケースでは がソートされているような列 を選ぶ方法はありません。
C. Minimum Grid Path / Минимальный путь на поле
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
2方向にしか動くことができません。
- 右方向: 水平方向で、 座標が大きくなる方向
- 上方向: 垂直方向で、 座標が大きくなる方向
つまり、経路は次のような構造になっています。
- 最初、右に行くか上に行くかを選択する
- 次に、選択した方向にある正整数の距離だけ進む(距離は独立して選ぶことができる)
- その後、方向を変えて(右から上、もしくは上から右)、このプロセスを繰り返す
方向転換を何度もしたくないので、 回よりも多く方向転換はしません。
結果として、経路は、各線分が正整数の長さを持ち、垂直線分と水平線分が交互に出てくる高々 本の線分から成る から までの折れ線の鎖となります。
全ての経路が等価であるというわけではありません。 個の整数 があり、ここで は 番目の成分のコストを表します。
これらのコストを用いて、経路のコストをその経路の線分の長さとコストの積の和として定義できます、すなわち、経路が 本の線分 から成る場合、経路のコストは (線分は から まで経路の順に番号が振られている)となります。
最小コストの経路を求め、そのコストを出力してください。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースの1行目には単一の整数 が与えられる。
各テストケースの2行目には 個の整数 が与えられる、これらは各線分のコストである。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、高々 本の交互に並ぶ線分から成る から までの経路の可能な最小コストを出力せよ。
入出力例
3 2 13 88 3 2 3 1 5 4 3 2 1 4
202 13 19
注記
1つ目のテストケースでは、 に到達するためには少なくとも1回は曲がらなければならないので経路はちょうど 本の線分から構成されます: 長さ の水平線分と長さ の垂直線分です。経路のコストは となります。
2つ目のテストケースでは、最適経路の1つが 本の線分から構成されています: 長さ の1本目と長さ の2本目、長さ の3本目です。
この経路のコストは です。
3つ目のテストケースでは、最適経路の1つが 本の線分から構成されています: 長さ の1本目と長さ の2本目、長さ の3本目、長さ の4本目です。この経路のコストは です。
D. The Number of Pairs / Количество пар
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
等式 が成り立つような正整数の組 の個数を求めなければなりません。ここで は の最小公倍数で、 は の最大公約数です。
入力
1行目には1つの整数 が与えられる、これはテストケースの個数である。
各テストケースは1行からなり、3つの整数 が与えられる。
出力
各テストケースについて1つの整数を出力せよ、その数とは上記の等式を満たす組 の個数である。
入出力例
4 1 1 3 4 2 6 3 3 7 2 7 25
4 3 0 8
注記
1つ目の入出力例では、正しい組は です。
2つ目の入出力例では、正しい組は です。
E. Chaotic Merge / Хаотичное слияние
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
列 をちょうど 個の0とちょうど 個の1がある順序で構成してる場合、それをマージ列を言います。
マージ は次のルールによって列 から生成されます。
- のとき、 の先頭から文字を削除し、 の末尾に追加する
- のとき、 の先頭から文字を削除し、 の末尾に追加する
となるような位置 がある場合、2つのマージ列 は異なります。
から までの全ての について であるばあい、文字列 をカオスであるといいます。
ある について を、位置 で始まり、位置 で終わる の連続した文字の部分列とします。
を と のカオスなマージを生成する異なるマージ列の数とします。 と の空でない部分文字列のみを考慮することに注意してください。
を計算してください。答えはmodulo で出力してください。
出力
単一の整数を出力せよ、その数は かつ での の和 modulo である。
入出力例
aaa bb
24
code forces
1574
aaaaa aaa
0
justamassivetesttocheck howwellyouhandlemodulooperations
667387032
注記
1つ目の入出力例では次のようになります。
- 組の部分文字列"
a
"と"b
"の組について、それぞれ"01
"と"10
"が有効なマージ列となる - 組の部分文字列"
a
"と"bb
"の組について、それぞれ"101
"が有効なマージ列となる - 組の部分文字列"
aa
"と"b
"の組について、それぞれ"010
"が有効なマージ列となる - 組の部分文字列"
aa
"と"bb
"の組について、それぞれ"0101
"と"1010
"が有効なマージ列となる - 組の部分文字列"
aaa
"と"b
"の組について、それぞれ有効なマージ列はない - 組の部分文字列"
aaa
"と"bb
"の組について、それぞれ"01010
"が有効なマージ列となる
従って、答えは となる。
F. Diameter Cuts / Разрезы диаметров
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
ある頂点組間の単純経路(各頂点が高々1回しか現れない経路)の長さは、その経路の辺の数です。木の直径はその木の全ての頂点組間の単純経路の最大長です。
木から辺を1集合分取り除こうとしています。辺が削除されると気は複数の小さな気に分裂します。結果として得られる全ての木の直径が全て 以下であれば、辺の集合は有効です。
2つの辺の集合は一方にしか現れないような辺がある場合、異なります。
有効な辺の集合の数 modulo を数えてください。
入力
1行目には2つの整数 が与えられる、それぞれ木の頂点数と最大許容直径である。
つづく 行のそれぞれには辺の記述が与えらえる: 2つの整数 。
与えられた辺は木を形成する。
出力
単一の整数を出力せよ、その数は有効な辺の集合の数 modulo である。
入出力例
4 3 1 2 1 3 1 4
8
2 0 1 2
1
6 2 1 6 2 4 2 6 3 6 5 6
25
6 3 1 2 1 5 2 3 3 4 5 6
29
注記
1つ目の入出力例では、与えられた木の直径は既に 以下です。したがって削除する辺の集合を任意に選べ、結果として得られる木の直径は 以下です。集合は空のものも含め 個あります。
2つ目の入出力例では、唯一の辺を削除しなければなりませんうでなければ、直径が となり、 よりも大きくなります。
3つ目と4つ目の入出力例の木はこちらです。
G. Graph Coloring / Раскраска графа
テストごとのメモリ制限: 1024 MB
入力: 標準入力
出力: 標準出力
古典的で簡単そうな響きでしょう? さて、次の形式の 個のクエリを処理しなければなりません。
- — 第1部の頂点 と第2部の頂点 を結ぶ新しい辺を追加する。この辺は次のように新しいインデックスを取得する: 最初に追加された辺はインデックス で2番目は 等々という感じである。辺の追加後、現在の最適彩色のハッシュを出力しなければならない(最適彩色が複数存在する場合、そのいずれかのハッシュを出力する)。実際には、このハッシュは確認されず、このクエリへの答えとして任意の数を出力することができるが、このハッシュを持つ彩色を出力するように求められることがある。
- — 前のクエリを処理したのと同じハッシュのグラフの最適彩色を出力します。このタイプのクエリはタイプ1のクエリの後にしか来ず、高々 回までしか来ない。このハッシュに対応する最適彩色が複数ある場合、そのうちのいずれかを出力せよ。
ある彩色で辺が赤や青だったとしても次の彩色ではその色が変わるかもしれません。
彩色のハッシュは次のように計算されます: を赤い辺のインデックスの集合とした時ハッシュは となります。
この問題はonline
で解かなければならないことに注意してください。つまり、入力全体を一度に読むことができないということです。最後のクエリの応答が出力されてから初めて各クエリを読むことができます。プログラム内で各出力ののち、C++
ではfflush
、Java
ではBufferedWriter.flush
という関数を用いてください。
入力
1行目には3つの整数 が与えられる。
その後、 行が続き、その 行目には2つの整数 が与えられる、これは 番目の辺が第1部の頂点 と第2部の頂点 をと結んでいることを表す。
次の行には1つの整数 が与えられる、これは処理しなければならないクエリの数である。
つづく 行には問題文に記載されている形式のクエリが与えられる;
入力の追加制約:
- どの時点においてもグラフ多重辺を持たない
- タイプ のクエリは前のクエリがタイプ のクエリであるときにしか来ない
- タイプ のクエリは最大 個である
出力
タイプ に答えるためには1つの整数を出力せよ、その数は最適彩色のハッシュである。
タイプ に答えるためには1行を出力せよ。これは整数 で始まっていなければならない、この数は赤い辺の本数である。そののち、 個の異なる整数が続く、これらは彩色における赤い辺のインデックスで、順番は問わない。各インデックスは既存辺に対応してなければならず、生成する彩色のハッシュは1つ前の1つ前のクエリの答えとして出力したハッシュと同じでなければならない。
クエリに対する答えが複数ある場合、そのいずれかを出力せよ。
入出力例
3 4 2 1 2 3 4 10 1 1 3 1 2 3 2 1 3 3 2 1 2 4 2 1 2 1 1 1 1 2
8 8 1 3 40 2 3 5 104 3 5 6 3 104 360 4 5 6 3 8