Educational Codeforces Round 123 問題文和訳
- A. Doors and Keys / Двери и ключи
- B. Anti-Fibonacci Permutation / Антифибоначчиевы перестановки
- C. Increase Subarray Sums / Увеличь суммы подотрезков
- D. Cross Coloring / Раскраска крестиками
- E. Expand the Path / Расширь маршрут
- F. Basis / Базис
A. Doors and Keys / Двери и ключи
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
廊下には、赤、緑、青の扉の3つの扉があります。扉は順々に並んでいますが、順番は違うものかもしれません。次の扉に進むためには、騎士はまず、先の扉を開かなければなりません。
それぞれの扉は、対応する色の鍵でのみ開けることができます。赤、緑、青の鍵の3つの鍵も廊下のどこかに置かれています。扉を開けるためには、騎士はまず、その色の鍵を拾う必要があります。
騎士は廊下の地図を所持しています。その地図は、6文字から成る文字列として記述することができます。
R
,G
,B
: それぞれ赤、緑、青の扉を表すr
,g
,b
: それぞれ赤、緑、青の鍵を表す
この6文字はそれぞれちょうど1度ずつだけ文字列の中に現れます。
騎士は通路の前、即ち地図の左側に立っています。
廊下の地図が与えられたとき、騎士が全ての扉を開けて廊下の先にいる姫に会うことができるかどうかを判定して下さい。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースは単一の文字列から成る。各文字はR
, G
, B
(扉)、r
, g
, b
(鍵)のいずれかで、それぞれちょうど一回ずつ現れる。
出力
各テストケースについて、騎士が全ての扉を開けることができる場合、YES
を出力せよ。そうでない場合、NO
を出力せよ。
入出力例
4 rgbBRG RgbrBG bBrRgG rgRGBb
YES NO YES NO
注記
1つ目のテストケースでは、騎士はまず全ての鍵を集め、そしてその鍵で全ての扉を開けます。
2つ目のテストケースでは、騎士の目の前に赤い扉がありますが、騎士はその扉用の鍵を持っていません。
3つ目のテストケースでは、それぞれの扉の前に鍵があるので、騎士は鍵を集めてすぐに使用することを3回行います。
4つ目のテストケースでは、騎士は青い扉を開けることができません。
B. Anti-Fibonacci Permutation / Антифибоначчиевы перестановки
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
与えられた数 に対して、長さ の相異なるanti-Fibonacci順列を出力して下さい。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースの単一行には、単一の整数 が与えられる。
出力
各テストケースについて 行出力せよ。各行には長さ のanti-Fibonacci順列が含まれていなければならない。各テストケースにおいて、各順列を2回以上出力してはいけない。
答えが複数存在する場合、そのうちのいずれかを出力せよ。この問題の制約の下では,長さ の相異なるanti-Fibonacci順列を得ることが常に可能であることは証明できる。
入出力例
2 4 3
4 1 3 2 1 2 4 3 3 4 1 2 2 4 1 3 3 2 1 1 3 2 3 1 2
C. Increase Subarray Sums / Увеличь суммы подотрезков
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
を、次の操作を行った後の の連続部分列の最大和とします: ちょうど 個の異なる位置の要素に を加える。空部分列も考慮し、その和は です。
部分列は、増加した要素全てを含む必要はないことに注意してください。
から までの全ての について、 の最大値を独立に計算してください。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
テストケースの1行目には2個の整数 が与えられる、これらは配列の大きさと加算値である。
2行目には 個の整数 が与えられる。
全てのテストケースでの の和は を超えない。
出力
各テストケースについて 個の整数を出力せよ、それらはそれぞれ から までの全ての についての の最大値である。
入出力例
3 4 2 4 1 3 2 3 5 -2 -7 -1 10 2 -6 -1 -2 4 -6 -1 -4 4 -5 -4
10 12 14 16 18 0 4 4 5 4 6 6 7 7 7 7 8 8 8 8
注記
1つ目のテストケースでは、どの要素に を足すかは関係ありません。和が最大となる部分列は常に配列全体です。 個の要素を だけ増やすと、 が和に足されます。
2つ目のテストケースでは、
- では、空部分列が最適である。
- では、位置 の要素を増やすのが最適である。最適和は部分列 *1 の となる。
- では、位置 と他の1つの位置の要素を増やすのが最適である。最適和は部分列 の のままである。
- では、全ての要素を増やさなければならない。最適和は部分列 の となる。
D. Cross Coloring / Раскраска крестиками
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
このシートに対して 回操作を行いました。そのうちの 番目の操作は次のように表されます。
- : 白でない 色のうち1色を選び、行 全体と列 全体をその色で塗る。操作の前に着色されていたかどうかに関係なく、各セルに新しい色が適用される。
回の操作を全て適用した後のシートを彩色と呼びます。異なる色に着色されたセルが少なくとも一つ存在したとき、2つの彩色は異なるといいます。
彩色は何通り存在しますか? 数をmodulo で出力して下さい。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
テストケースの1行目には4個の整数 が与えられる、これらはシートの大きさ、白以外の色数、操作回数である。
続く 行の 行目には 番目の操作についての記述が与えられる。2個の整数 で、それぞれ操作を適応する行と列である。
全てのテストケースでの の和は を超えない。
出力
各テストケースについて単一の整数を出力せよ、その数とは彩色数のmodulo である。
入出力例
2 1 1 3 2 1 1 1 1 2 2 2 3 2 1 1 1 2 2
3 4
E. Expand the Path / Расширь маршрут
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
ロボットがセル に配置されています。ロボットは次の2種類の移動を行うことができます。
D
: 下に1セル移動R
: 右に1セル移動
ロボットはグリッドの外に出ることはできません。
一連の動き が与えられます、これはロボットの初期経路です。この経路でロボットがグリッドの外に進むことはありません。
これに対して、任意回数修正を加えることができます(0個の場合も可)。1回の修正では、一連の中の動きの1つを複製することができます。即ち、D
をDD
に、R
をRR
に置き換えます。
そのセルを通り、グリッドの外に進むことのないような修正後の経路が存在するようなセルの個数を数えて下さい。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースの1行目には単一の整数 が与えられる、これはグリッドの行や列の数である。
各テストケースの2行目には文字D
とR
のみから成る、空でない文字列 が与えられる、これは初期経路である。この経路でロボットがグリッドの外に進むことはない。
全てのテストケースでの文字列 の長さの和は を超えない。
出力
各テストケースについて単一の整数を出力せよ、その数とは、そのセルを通り、グリッドの外に進むことのないような修正後の経路が存在するようなセルの個数である。
入出力例
3 4 RD 5 DRDRDRDR 3 D
13 9 3
注記
1つ目のテストケースでは、次のような修正経路を考えれば十分です。
RD
RRD
RRRD
RRRDD
RRRDDD
: この経路ではセル を訪れるRD
RRD
RRRD
RRDDD
: この経路ではセル を訪れるRD
RDD
RDDD
: この経路ではセル を訪れる
従って、1回以上の修正後の経路で訪れるセルは です。
2つ目のテストケースでは、ロボットがグリッドの外に進まない修正経路はありません。そのため、訪れるセルは経路DRDRDR
で訪れるもののみです。
3つ目のテストケースでは、1回以上の修正後の経路で訪れるセルは です。
以下は、全てのテストケースでのセルです。
F. Basis / Базис
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
2つの関数を導入します。
- *2 は整数配列 と正整数 を受け取る関数で、この関数の計算結果は の各要素をその要素のちょうど 回のコピーで置き換えることによって得られる配列の最初の 個の要素を含む配列である。
例えば、 は次のように計算する。まず、配列の各要素をその2回のコピーで置き換え、 を得る。そして、得られた配列の最初の 要素を取り出し、関数の計算結果は となる。 - は整数配列 と異なる2個の正整数 を受け取る関数である。この関数の計算結果は に等しい全ての要素を に置き換え、 に等しい全ての要素を に置き換えた配列 である。
例えば、 である。
次のいずれかを満たす場合、配列 は の親であるといいます。
- であるような正整数 が存在する
- であるような異なる2個の正整数 が存在する
が であり が であり、各 について が の親であるような有限配列 が存在するとき、配列 は配列 の祖先といいます。
さて、問題そのものについてです。
2個の整数 が与えられています。次の条件を満たす配列の列 を作ることが目標です。
- 各配列 はちょうど 個の要素を含み,全要素は から までの整数である
- ちょうど 個の から までの整数から成る配列 それぞれに対して、この列には、 の祖先であるような少なくとも1つの配列 を含む
このような列に含まれる配列の最小個数を出力して下さい。
入力
唯一の行には2つの整数 が与えられる。
出力
1つの整数を出力せよ、条件を満たす配列の最小個数である。答えが大きくなる可能性があるため、modulo で出力せよ。
入出力例
3 2
2
4 10
12
13 37
27643508
1337 42
211887828
198756 123456
159489391
123456 198756
460526614
注記
1つ目の入出力例を分析しましょう。
1つ目の入出力例で考えられる答えの1つは、列 です。 から までの要素からなる大きさ の配列はすべてこの列内に祖先を持ちます。
- 配列 の場合、祖先は である:
- 配列 の場合、祖先は である:
- 配列 の場合、祖先は である:
- 配列 の場合、祖先は である
- 配列 の場合、祖先は である:
- 配列 の場合、祖先は である
- 配列 の場合、祖先は である:
- 配列 の場合、祖先は である: