Codeforces Round #776 (Div. 3) 問題文和訳
- A. Deletions of Two Adjacent Letters / Удаления двух соседних букв
- B. DIV + MOD
- C. Weight of the System of Nested Segments / Вес системы вложенных отрезков
- D. Twist the Permutation / Петя и циклические сдвиги
- E. Rescheduling the Exam / Перенос экзамена
- F. Vitaly and Advanced Useless Algorithms / Виталий и Advanced Useless Algorithms
- G. Counting Shortcuts / Подсчёт коротких путей
A. Deletions of Two Adjacent Letters / Удаления двух соседних букв
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
文字列の長さが よりも大きい限り、次の操作を行うことができます: 文字列 内の任意の隣接する2文字を選び、それを文字列から削除するという操作です。例えば、文字列"lemma
"に操作を一度行うと、次の4つの文字列のいずれかを得ることができます: "mma
", "lma
", "lea
", "lem
"。具体的には、1回の操作で、文字列の長さは だけ短くなります。
形式的にが、文字列 を という形で表されるとします。1回の操作で、任意のインデックス を選び、 に置き換えます。
与えられた文字列 と文字 について、最終的に等式 が成立するような一連の操作が可能であるか判別して下さい。即ち、文字 から成る長さ の文字列で処理が終了するような一連の操作は存在するでしょうか?
入力
入力データの1行目には1個の整数 が与えられる、これは入力のテストケース数である。
個のテストケースの説明が続く。各テストケースは2行で表される。
- から までの奇数長で、ラテンアルファベットの小文字で構成される文字列
- ラテンアルファベットの小文字1文字 から成る文字列
出力
各テストケースについて、別々の行に次を出力せよ。
- 文字列 を が真となるように変換できる場合、
YES
- そうでない場合、
NO
YES
とNO
はどのレターケースで出力してもよい(例えば、文字列yEs
, yes
, Yes
, YES
は肯定とみなされる)。
入出力例
5 abcde c abcde b x y aaaaaaaaaaaaaaa a contest t
YES NO NO YES YES
注記
1つ目のテストケースでは、 "abcde
"です。 "c
"にしなければなりません。1回目の操作では、最初の2文字を消し、 "cde
"となります。2回目の操作で最後の2文字を消し、期待される値 "c
"を得ます。
3つ目のテストケースでは、 "x
"で、 "y
"にしなければなりません。明らかに、これを実現することはできません。
B. DIV + MOD
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- ; ここでは は の切り捨てを、 は を で割った余りを表す。
例えば、 とすると、 という値になります。
数 は固定で、Владにとって既知です。 が から までの両端を含む 任意の整数を取りえる場合、 の最大値をВладが求められるよう手助けをしてください。
入出力例
5 1 4 3 5 8 4 6 10 6 1 1000000000 1000000000 10 12 8
2 4 5 999999999 5
注記
1つ目のテストケースでは
答えとしては、自明として、 と が適切です。
C. Weight of the System of Nested Segments / Вес системы вложенных отрезков
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
各組 について条件 を満たすとき、 個の区間の列 は入れ子区間と呼ばれます。言い換えると、2番目の区間は1番目の区間の厳密な内側にあり、 3番目の区間は2番目の区間の厳密な内側にある、という具合に成り立っているというものです。
与えられた数 について、次を満たす入れ子区間を求めて下さい。
例えば、 とします。与えられた点が、図中に示され、重みは赤で、座標は青で書かれています。次のような3つの入れ子区間のシステムを構築します。
入力
入力データの1行目には1個の整数 が与えられる、これは入力のテストケース数である。
各テストケースの前には空行が書かれている。
各テストケースの1行目には2つの正整数 が与えられる。
続く 行には整数の組 が与えられる、これらはそれぞれ番号 の点の座標と重みを表す。全ての は相異なる。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、 行出力せよ。その1行目には構築したシステムの重みを出力し、続く 行にはちょうど2個の整数を出力せよ、2つの整数とは 個目の区間 の端点のインデックスである。区間の端点を出力する順番は重要ではなく、先に左端点のインデックスを出力し、次に右端点の番号を出力してもよく、その逆でもよい。
入出力例
3 3 8 0 10 -2 1 4 10 11 20 7 -1 9 1 2 3 5 -2 3 6 -1 2 1 3 3 -1 2 4 4 0 8 2 2 5 5 -1 3 -2 1 0 -2 0 -5 -3
12 2 6 5 1 7 8 10 1 6 5 2 3 4 -6 5 1 4 2
注記
1つ目のテストケースでは、問題文の例と一致します。構築されたシステムの重みが最小であることは証明できます。
2つ目のテストケースでは、 個の点しかないため、それぞれを用いて 個の区間を構成する必要があります。
D. Twist the Permutation / Петя и циклические сдвиги
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
彼は 回の操作を順次に行いました。そして最後に、彼は新しい状態の配列 を受け取りました。
回目の操作では、Петяは配列の最初の 個の要素を選び、それらを右にに似の回数循環シフトさせました( 以上のインデックスの要素はそのままです)。1回の右への循環シフトは、配列 を配列 にするような変換です。
例えば、 で (つまり、3回目の操作)の場合、この操作の結果として、彼は次の3つの配列のいずれかを得ることができます。
- ( 回の循環シフト、もしくは で割り切れる回数)
- ( 回の循環シフト、もしくは で割ると 余る回数)
- ( 回の循環シフト、もしくは で割ると 余る回数)
また、別の例を見てみましょう。、即ち 初期状態で とします。考えられるシナリオの1つは次の通りです。
- : Петяが何回循環シフトを行っても配列 は変化しない
- : Петяが 回循環シフトを行うとすると、配列は となる
- : Петяが 回循環シフトを行うとすると、配列は となる
- : Петяが 回循環シフトを行うとすると、配列は となる
- : Петяが 回循環シフトを行うとすると、配列は変化しない
- : Петяが 回循環シフトを行うとすると、配列は となる
回の操作を行った後の配列 の最終状態が与えられます。この結果になるような操作方法が存在するか判別してください。答えが存在する場合、 回の操作のそれぞれで行った循環シフトの回数を出力して下さい。
入力
入力データの1行目には1個の整数 が与えられる、これは入力のテストケース数である。
テストケースについての記述が続く。
各テストケースの1行目には1個の整数 が与えられる、これは配列 の長さである。
次の行には配列 の最終状態である 個の整数 が与えられる。全ての は相異なる。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、答えを個別の行に出力せよ。
与えられた最終の値 が各操作での任意の数の巡回シフトによって得ることが場合は を出力せよ。そうでない場合、 個の非負整数 を出力せよ、ここでの は、 番目の操作の間に配列の最初の 個の要素が右に 回巡回シフトされたことを意味する。
複数の答えが存在する場合、シフトの総数が最小となる(つまり の値の合計が最小の)ものを出力せよ。そのような答えが複数存在する場合は、そのうちのいずれかを出力せよ。
入出力例
3 6 3 2 5 6 1 4 3 3 1 2 8
0 1 1 2 0 4 0 0 1 0 1 2 0 2 5 6 2
E. Rescheduling the Exam / Перенос экзамена
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
試験期間のスケジュールについて、Дмитрийは特別な値 について考えています、この値は全ての試験の前の休息時間の最小値です。例えば、上の図について、 です。スケジュールにおいて、彼は正確に 個の数、試験 と の間の休息日数(試験機関の開始を と見做す*4 )を数えます。そして、この 個の数の中で最小値である を求めます。
Дмитрийは試験期間のスケジュールを改善できると考えています。彼は、1つの試験の日程を変更する(任意の1つの を変更する)よう求めることができます。 が全て異なるままで、 の値ができるだけ大きくなるように、彼が日付を変更するのを手助けしてください。
例えば、上のスケジュールについて、2回目の試験を試験期間の一番最後に動かすのがДмитрийにとって最も有利です。新しいスケジュールは次のようになります。
(状況を改善するために試験を移動させる方法がない場合、)Дмитрийは提供されたスケジュールを変更しないままにしておくこともできます。
入力
入力データの1行目には1個の整数 が与えられる、これは入力のテストケース数である。テストケースについての記述が続く。
各テストケースの前には空行が書かれている。
各テストケースの1行目には2個の整数 が与えられる、これらはそれぞれ、試験の個数と期間の長さである。
各テストケースの2行目には 個の整数 が与えられる、この 番目の数が 番目の試験の日付を表す。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、Дмитрийが1つの試験を任意の日に移動させることができる場合の の最大値を出力せよ。 の値は全て異なるままでなければならない。
入出力例
9 3 12 3 5 9 2 5 1 5 2 100 1 2 5 15 3 6 9 12 15 3 1000000000 1 400000000 500000000 2 10 3 4 2 2 1 2 4 15 6 11 12 13 2 20 17 20
2 1 1 2 99999999 3 0 1 9
注記
1つ目の入出力例は、問題文中に書かれています。
2つ目の入出力例での最適なスケジュール変更は次の通りです。
3つ目の入出力例では、 日目の試験を 日目から 日目の間の任意の日に移動させる必要があります。
4つ目の入出力例では、いかなるスケジュールの変更でも が小さくなるため、スケジュールをそのままにしておくべきです。
5つ目の入出力例では、 日目の試験を 日目から 日目の間の任意の日に移動させる必要があります。
6つ目の入出力例での最適なスケジュール変更は次の通りです。
7つ目の入出力例では、どの日も試験日であり、スケジュールを変更することは不可能です。
F. Vitaly and Advanced Useless Algorithms / Виталий и Advanced Useless Algorithms
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
Виталийは何事も誠実に行うため、各タスクを 以上完了させたいと思っています。初期状態では、彼の各タスクの完了率は です。
Виталийには複数のトレーニングオプションがあり、各オプションは1度までしか使用できません。 番目のオプションは3つの整数 によって特徴づけられます。Виталийが 番目のオプションを利用した場合、(現時点から) 時間後に彼は、タスク の進捗を 進めることになります。
例えば、Виталийに3つのタスクがあるとします。配列 が であるとします。Виталийには次の つのオプションがあるとします: 。
このとき、次のように準備を行うと、Виталийは時間内に全てを完了させることができます。
- Виталийが 番目のオプションを選ぶ。 時間後に、 番目のタスクを にする。 番目のタスクの締切まであと 時間である。
- Виталийが 番目のオプションを選ぶ。 時間後に、 番目のタスクを完了させる。 番目のタスクの締切まであと 時間、 番目のタスクの締切まであと 時間である。
- Виталийが 番目のオプションを選ぶ。 時間後に、 番目のタスクを で完了させ、締め切りちょうどに 番目のタスクが完了したことになる。
- Виталийが 番目のオプションを選ぶ。 時間後に、 番目のタスクを完了させ、締め切りちょうどに 番目のタスクが完了したことになる。*6
このようにして、 つのオプションを行うことで、Виталийは時間内にコースを完全に完了させることができます。
Виталийは正しい順番でタスクを完了させることができるように、オプションを出力し、Виталийを助けてください。各オプションは一度までしか使用できないことに注意してください。答えが複数存在する場合、そのいずれをを出力してもいいです。
入力
入力データの1行目には1個の整数 が与えられる、これは入力のテストケース数である。
テストケースについての記述が続く。
各テストケースの記述の1行目には2個の整数 が与えられる、これらはそれぞれ、タスクとトレーニングオプションの個数である。
次の行には 個の整数 が与えられる、タスク の締め切りを表す。配列の値は非減少、即ち となっている。
続く 行には、3つ組の整数 が与えられる、もしВиталийがこのオプションを選択すれば、 時間後にタスク の進捗を 進める。オプションには入力データの順に から までの番号が振られている。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、1行目に、数 を出力せよ、これは、オプションのうち 個を用いて、Виталийが各タスクを 以上で完了できることを表す。同じオプションは繰り返してはいけない。Виталийが全てのタスクを時間内に完了できない場合は、 を出力せよ。
もし答えが存在する場合、続く行に から までの異なる整数 個を、望む順序での選択肢の番号を、出力せよ。複数の答えが存在する場合、そのいずれを出力してもよい。
入出力例
5 3 5 5 7 8 1 1 30 2 3 50 2 3 100 1 1 80 3 3 100 1 5 51 1 36 91 1 8 40 1 42 83 1 3 45 1 13 40 2 9 9 20 2 8 64 2 7 64 1 20 56 2 8 76 2 20 48 1 2 89 1 3 38 2 18 66 1 7 51 3 2 7 18 33 1 5 80 3 4 37 2 5 569452312 703565975 1 928391659 66 1 915310 82 2 87017081 92 1 415310 54 2 567745964 82
4 1 4 3 5 3 2 4 5 4 6 7 1 2 -1 4 2 4 3 5
3 3 9 20 31 40 1 9 64 3 17 100 3 9 59 3 18 57 3 20 49 2 20 82 2 14 95 1 8 75 2 16 67 2 6 20 36 2 2 66 2 20 93 1 3 46 1 10 64 2 8 49 2 18 40 1 1 1000000000 1 1000000000 100
-1 4 3 4 1 5 1 1
G. Counting Shortcuts / Подсчёт коротких путей
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
頂点 から への経路のうち、 から までの最短経路と長さの差が 以下である経路の数を求めて下さい。このとき、同じ頂点や辺を2回以上通るもの(単純でないパス)であっても、条件を満たす形を全てを考慮する必要があります。
例えば、 として、上図のようなグラフであるとします。 から への最短経路の長さは です。長さが最大で である経路を全て考えます。
- : 経路長は
- : 経路長は
- : 経路長は
- : 経路長は
合致する経路は全部で4本あります。
入力
入力データの1行目には1個の整数 が与えられる、これは入力のテストケース数である。テストケースについての記述が続く。
各テストケースの前には空行が書かれている。
各テストケースの1行目には2個の整数 が与えられる、これらはグラフの頂点数と辺の本数である。
2行目には2個の整数 が与えられる、これらは経路の始点と終点の番号である。
続く 行には辺の記述が与えられ、その 行目には2個の整数 が与えられる、これらは 本目の辺が結ぶ頂点の番号である。グラフは連結であり、自己辺や多重辺が含まないことは保証されている。
入力データ内の全てのテストケースでの の和が を超えないことは保証されている。同様に、入力データ内の全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、単一の数を出力せよ、その数とは から までの最短経路と長さの差が 以下である経路の個数である。
この数は大きくなるかもしれないため、modulo で出力せよ。
入出力例
4 4 4 1 4 1 2 3 4 2 3 2 4 6 8 6 1 1 4 1 6 1 5 1 2 5 6 4 6 6 3 2 6 5 6 1 3 3 5 5 4 3 1 4 2 2 1 1 4 8 18 5 1 2 1 3 1 4 2 5 2 6 5 7 3 8 4 6 4 8 7 1 4 4 7 1 6 6 7 3 8 8 5 4 5 4 3 8 2
2 4 1 11
*1:露[vɫat](ヴラド、Vlad); Vladはルーマニア語などではスラブ系の男性名 Vladimirなどの短縮形・愛称の一つであるが、ここではロシア人名とした
*2:露[ˈpʲetʲə](ピェチャ、Petya, Pjetja): ロシア男性名 Пётр(Петр、Petr、ピョートル)の指小形、愛称、英Peteに相当、Пётрは英独Peter等と同じく聖ペテロに由来
*3:露[ˈdmʲitrʲɪj](ドミトリー、Dmitri, Dmitry, Dmitrij) ロシア男性名、英Demetriusに相当、Пётрは英独Peter等と同じく古典ギリシャ男性名Δημήτριος(Dēmḗtrios)に由来
*4:この部分は意訳、恐らく誤記あり
*5:露[vʲɪˈtalʲɪj](ヴィタリー、Vitali, Vitaly, Vitalij) ロシア男性名、ラテン男性名Vītālisに由来
*6:この部分も意訳