Codeforces Round #709 (Div. 2) 問題文和訳
- A. Prison Break / Побег (500点)
- B. Restore Modulo / Восстановление модуля (1250点)
- C. Basic Diplomacy / Базовая дипломатия (1500点)
- D. Playlist / Плейлист (2000点)
- E. Skyline Photo / Панорама города (2500点)
- F. Useful Edges / Полезные рёбра (2750点)
A. Prison Break / Побег (500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
刑務所は 個のセルに分割される の長方形として表すことができ、各セルが刑務所の独房を、セル間の辺は独房間の壁を、外側の辺は外壁を表しています。Michaelは判決を受ける前に刑務官の友人に頼んでいくつかの壁(独房間の壁および外壁)に(隠れた)穴をあけてもらうことができます。Michaelは、自分がどの独房に入ったとしても刑務所から出られるようにしたいです。しかし一方で、できるだけ壁を壊さないようにしたいと思っています。
どの独房からも外に出る経路ができるように壊さなければならない壁の最小枚数を求めてください。
入力
1行目には単一の整数 が与えられる、これはテストケース数である。
つづく 行のそれぞれには2つの整数 が与えられる、これらは対応するテストケースを表している。
出力
各テストケースについて各行に単一の整数を出力せよ、その数とは問題hwの答えである。
入出力例
2 2 2 1 3
4 3
注記
テストケース例で考えられる逃走計画を以下に示します。壊した壁は灰色で、壊されていない壁は黒で表されています。
B. Restore Modulo / Восстановление модуля (1250点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
この生成器は4つの非負数 を受け取ります。 と は正でなければならず、 は非負で、 については でなければなりません。長さ の配列 が以下のルールに従って生成されます。
- , ここで は を で割った余りを表す
- である全ての について
例えば、 とすると、 となります。
このような配列の価格は、この生成器の の値になります。
Лёшаは疑問に思いました、それぞれの配列についてどれだけの金額を得ることができるのだろうかと。全ての配列について、この配列を生成する4数 が存在するかどうかわかるように手助けしてください。もし存在するならば を最大化してください。
入力
1行目には単一の整数 が与えられる、これは配列の個数である。
配列についての記述の1行目には単一の整数 が与えられる、これはこの配列のサイズである。
配列についての記述の2行目には 個の整数 が与えられる、これらはこの配列の要素である。
全てのテストケースでの配列サイズの和が を超えないことは保証されている。
出力
全ての配列について以下のものを出力せよ。
- この配列を生成するような4数が存在しない場合;
- が任意の大きさになる場合:
- その他の場合 の最大値と適切な
入出力例
6 6 1 9 17 6 14 3 3 4 2 2 3 7 3 4 3 2 2 4 5 0 1000000000 0 1000000000 0 2 1 1
19 8 -1 -1 -1 2000000000 1000000000 0
C. Basic Diplomacy / Базовая дипломатия (1500点)
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
各日に何人かの友人はプレイ可能で、その他の友人はプレイができません。毎日Алексейはプレイ可能な友人のうち1人を選んで、プレイすることを申し出ます(勿論、彼等は常に承諾します)。しかし、彼らのうち誰かが 回より厳密に多く選ばれてしまうと、他の全ての友人は気分を害してしまいます。勿論、Алексейは誰かを怒らせてしまいたくありません。
誰も 回よりも厳密に多い回数選ばれないように、彼がチームメイトを選ぶのを手伝ってください。
入力
各テストは複数のテストケースから成る。1行目にはテストケース数 が与えられる。テストケースについての記述が続く。
各テストケースの1行目にはそれぞれ友人の人数とプレイ日数を表す2つの整数 が与えられる。
つづく 行の 行目には 1つの整数 が与えられ、それに空白区切りの 個の異なる整数 が続く、これらは 日に目にプレイ可能な友人のインデックスである。
全てのテストケースでの の和が(それぞれ) を超えないことは保証されている。全てのテストケースの全ての日での の和が を超えないことは保証されている。
出力
各テストケースについて答えを出力せよ。目標を達成する方法がない場合は"NO
"と出力せよ。
そうでない場合、1行目に"YES
"と出力し、2行目に空白で区切られた 個の整数 を出力せよ。各 は 日目に選ばれた友人を表していなければならない(したがって、 の1つでなければならない)。
どの値も 回よりも多く出現してはいけない。複数の答えが存在する場合、そのいずれかを出力せよ。
入出力例
2 4 6 1 1 2 1 2 3 1 2 3 4 1 2 3 4 2 2 3 1 3 2 2 1 1 1 1
YES 1 2 1 1 2 3 NO
D. Playlist / Плейлист (2000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
各曲には正整数であるジャンル が振られています。Аркадийがジャンル の曲を聴き終え、その前に聴いていた曲のジャンルを とします。 の場合、最後に聴いていた(ジャンル の)曲をプレイリストに削除します。その後、削除された曲をスキップし、前に聴いた曲について忘れて、通常通り曲を聴き続けます。言い換えれば、ある曲を削除した後、すぐに次の曲を削除することはできません。
ここで は整数 の最大公約数(GCD)*5を表します。
例えば、初期状態の曲のジャンルが であったとすると、プレイリストは次のように変換されます: であるため であるため 。太数字は、最後に再生された2つの曲を表しています。曲が削除された後は、Аркадийはその曲と前の曲を聴いたことを忘れてしまうことに注意してください。
初期状態のプレイリストが与えられるので、どの曲が最終的に削除されるか、そして、度の順に削除されるかを判別してください。
入力
各テストは複数のテストケースから成る。1行目にはテストケース数 が与えられる。テストケースについての記述が続く。
各テストケースの1行目には単一の整数 が与えられる、これは曲数である。
各テストケースの2行目には 個の整数 が与えられる、これらは曲のジャンルである。
全てのテストケースでの の和が を超えないことは保証されている。3
出力
各テストケースについて、単一行に出力せよ。まず、単一の整数 を出力せよ、これは削除された曲数である。そのあと、 個の異なる整数を出力せよ、これらは削除された順番で削除された曲を表している。
入出力例
5 5 5 9 2 10 15 6 1 2 4 2 4 2 2 1 2 1 1 1 2
2 2 3 2 2 1 2 2 1 1 1 0
注記
1つ目のテストケースについての説明は問題文中にあります。
2つ目のテストケースではプレイリストは次のように変換されます。 であるため であるため
3つ目のテストケースではプレイリストは次のように変換されます。 であるため (Аркадийは同じ曲を2回続けて聴いた) であるため
4つ目のテストケースでは2曲目を削除した後の3つ目のテストケースと同じです。
5つ目のテストケースでは同じ曲を何度も何度も聴いていますが、 であるため、削除されません。
E. Skyline Photo / Панорама города (2500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
街には 個のビルがあり、 番目のビルの高さは正の値 です。街にある 個の全てのビルの高さは異なります。さらに、それぞれのビルの美しさは です。街には醜い建物もあるので、美しさは正にも負にもなりえることに注意してください。
写真の集合はスカイライン上のビルを撮影した1枚以上の写真から成ります。各写真は連続インデックス区間を形成する1つ以上のスカイライン上のビルが含まれます。各ビルはちょうど1枚の写真に写っていなければなりません。つまり、どの写真にも写っていないビルがあったり、複数の写真に写っているビルが存在する場合、その写真の集合は有効ではないという訳です。
写真の美しさは、写っている最も短いビルの美しさ に等しいです。写真の集合の美しさの合計は、その写真に含まれる全ての写真の美しさの合計です。有効な写真の集合が持つ最大の美しさを求めるAliceの手伝いをしてください。
入力
1行目には単一の整数 が与えられる、これはスカイライン上のビルの数である。
2行目には 個の異なる整数 が与えられる。 番目の数は建物 の高さを表す。
3行目には 個の異なる整数 が与えられる。 番目の数は建物 の美しさを表す。
出力
有効なスカイラインの写真の集合についてAliceが達成できる最大の美しさを表す1つの数値を出力せよ。
入出力例
5 1 2 3 5 4 1 5 3 2 4
15
5 1 4 3 2 5 -3 4 -10 2 7
10
2 2 1 -2 -3
-3
10 4 7 3 2 5 1 9 10 6 8 -4 40 -46 -8 -16 4 -10 41 12 3
96
注記
1つ目の入出力例では、Aliceは5枚の写真を撮り、それぞれに1つのビルを写すことで最大の美しさを得ることができます。
2つ目の入出力例では、Aliceは4枚の写真を撮ることで、最大の美しさ を達成することができます。1つのビルを写したビル の3枚の写真のそれぞれの美しさ で、もう1枚の写真はビル を写し、美しさ です。
3つ目の入出力例では、Aliceは街全体の写真を1枚だけ撮ります。
4つ目の入出力例では、Aliceは最大の美しさを得るために、1つのビルを写したビル の写真と、ビル を写した1枚の写真を撮ります。
F. Useful Edges / Полезные рёбра (2750点)
テストごとのメモリ制限:512 MB
入力: 標準入力
出力: 標準出力
- と がこの経路の端点である
- はこの経路の辺の1つである
- この経路の全ての辺の重さの合計が を超えない
このグラフ上の有用な辺の数を出力してください。
入力
1行目には2つの整数 が与えられる。
つづく 行の各行には3つの整数 が与えられる、これらは と を結ぶ重さ の辺を表す。
次の行には唯一の整数 が与えられる、これは三つ組の個数である。
つづく 行の各行には 三つ組 を表す3つの整数 が与えられる。
次のことは保証されている。
- グラフにはループや多重辺は含まれない
- 三つ組内の全ての組 は異なる
出力
グラフ内の有用な辺の数を表す単一の整数を出力せよ。
入出力例
4 6 1 2 1 2 3 1 3 4 1 1 3 3 2 4 3 1 4 5 1 1 4 4
5
4 2 1 2 10 3 4 10 6 1 2 11 1 3 11 1 4 11 2 3 11 2 4 11 3 4 9
1
3 2 1 2 1 2 3 2 1 1 2 5
2
注記
1つめの入出力例では重み のものを除いてすべての辺が有用です。
2つ目の入出力例では、 と の間の辺は、経路 に属し、 であるため、唯一有用です。一方で、 と の間の辺は、有用ではありません。
3つ目の入出力例では、長さがちょうど の経路 が存在するので、両方の辺が有効です。経路が1つの頂点を2回以上通過することがあることに注意してください。