Educational Codeforces Round 124 問題文和訳
- A. Playoff / Плей-офф
- B. Prove Him Wrong / Докажи, что он не прав
- C. Fault-tolerant Network / Отказоустойчивая сеть
- D. Nearest Excluded Points / Ближайшие точки
- E. Sum of Matchings / Сумма паросочетаний
- F. Tower Defense
A. Playoff / Плей-офф
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
トーナメントは ラウンドで行われます。各ラウンドでは、各選手が、ちょうど1つの組に属するように組み分けを行います。それぞれの組で選手が競い合い、どちらかが勝ちます。勝者は次のラウンドに進み、敗者はトーナメントから脱落します。
組み分けは次のように行われます。
- 第1回戦では、選手 と選手 、選手 と選手 、選手 と選手 、…というように戦います。
- 第2回戦では、 の試合の勝者と の試合の勝者、 の試合の勝者と の試合の勝者、…というように戦います。
- その後のラウンドも同じルールで行われます。
選手 と が戦ったとき、勝者は次のように決まります。
- が奇数の場合、番号が小さい選手が勝つ(つまり、 なら が勝ち、そうでないなら が勝つ)
- が偶数の場合、番号が大きい選手が勝つ
次図は、 の時のトーナメントの様子です。
ここでの課題は、「整数 が与えらえれたとき、優勝する選手の番号を判別すること」です。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。
各テストケースは1行から成り、1個の整数 が与えられる。
出力
各テストケースについて、1個の整数を出力せよ、その数とはトーナメントの勝者の番号である。
入出力例
2 3 1
7 1
注記
の場合は、問題文中の図に示されています。
の場合、選手 と の試合1回だけが行われます。 は奇数であるため、番号の小さい方の選手が勝ちます。よって、選手 が勝者となります。
B. Prove Him Wrong / Докажи, что он не прав
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- 2つのインデックス
- とする*1
この操作でしばらく遊んでいたら、彼は次のような結論に達しました。
- である 個の整数のどのような配列 に対しても、操作後に の総和が減少するようなインデックスの組 が見つけることができる*2
この文は疑わしいと思っているため、与えられた について反例を見つけたいと思っています。反例を見つけ、彼が間違っていると証明できるでしょうか?
言い換えると、どのようなインデックスの組 に対しても操作後に総和が減少しない(増加、または変化なし)ような 個の整数 からなる配列 を見つけてください。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。その後、 個のテストケースが続く。
各テストケースの1行目にして唯一の行には、単一の整数 が与えられる、これは配列 の長さである。
出力
各テストケースについて、反例である大きさ の配列 が存在しない場合、NO
と出力せよ。
そうでない場合、YES
と出力し、その後、配列 自身 を続けて出力せよ。反例が複数存在する場合、そのうちにいずれかを出力せよ。
入出力例
3 2 512 3
YES 1 337 NO YES 31 4 159
注記
1つ目のテストケースでは、有効なインデックスの組は のみです。
インデックス (または )に対して操作を行うと、、つまり、配列 を得ます。どちらの場合も操作が増加するため、この配列 は反例となります。
C. Fault-tolerant Network / Отказоустойчивая сеть
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
初期状態では、各列の隣接するコンピュータの組(全ての について組 )はワイヤーでつながれていて、2列が2つの独立したコンピュータネットワークを形成しています。
ここでの課題は、「1つ以上の異なる列のコンピュータの組を繋ぐことで1つの共通ネットワークに結合する」ことです。1列目の 台目のコンピュータと2列目の 台目のコンピュータを繋ぐには のコストがかかります。
1台のコンピュータを他の複数のコンピュータと接続することはできますが、少なくとも基本的な障害耐性(フォールトトレランス)を確保する必要があります、即ち、1台のコンピュータが故障しても、ネットワークがつながったままになるようにコンピュータを接続する必要があります。言い換えれば、1台のコンピュータが故障しても(それがどのコンピュータであっても)、ネットワークが2つ以上に分かれないようにするということです。
障害耐性ネットワークを構築するために必要は最小コストはいくつでしょう?
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。その後、 個のテストケースが続く。
各テストケースの1行目には、単一の整数 が与えられる、これは各列のコンピュータの台数である。
各テストケースの2行目には、 個の整数 が与えられる、これらは1列目のコンピュータの等級である。
各テストケースの3行目には、 個の整数 が与えられる、これらは2列目のコンピュータの等級である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて単一の整数を出力せよ、その数とは障害耐性ネットワークを構築するために必要は最小コストである。
入出力例
2 3 1 10 1 20 4 25 4 1 1 1 1 1000000000 1000000000 1000000000 1000000000
31 1999999998
注記
1つ目のテストケースでは、4組のコンピュータを接続するのが最適です。
- 1列目のコンピュータ と2列目のコンピュータ : コスト
- 1列目のコンピュータ と2列目のコンピュータ : コスト
- 1列目のコンピュータ と2列目のコンピュータ : コスト
- 1列目のコンピュータ と2列目のコンピュータ : コスト
合計で、 です。
2つ目のテストケースでは、1列目の と2列目の 、1列目の と2列目の を接続するのが最適です。
D. Nearest Excluded Points / Ближайшие точки
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
各点 について、与えられた 点に含まれない、(マンハッタン距離で)最も近い整数座標の点を求めて下さい。そのような点が複数存在する場合、どれを選んでもいいです。
2点 間のマンハッタン距離は です。
入力
1行目には単一の整数 が与えられる、これはテストケースの個数である。その後、 個のテストケースが続く。
続く 行は点についての説明である。その 行目には2個の整数 が与えられる、これは 番目の点の座標である。
入力内の全ての点が相異なることは保証されている。
出力
行出力せよ。 行目には与えられた 点に含まれない、 番目の点から(マンハッタン距離で)最も近い整数座標の点を出力せよ。
出力する座標は範囲 内でなければならない。どのような最適解もこれらの制約を満たすことは証明することができる。
答えが複数存在する場合、どれを出力してもよい。
入出力例
6 2 2 1 2 2 1 3 2 2 3 5 5
1 1 1 1 2 0 3 1 2 4 5 4
8 4 4 2 4 2 2 2 3 1 4 4 2 1 3 3 3
4 3 2 5 2 1 2 5 1 5 4 1 1 2 3 2
E. Sum of Matchings / Сумма паросочетаний
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
2部グラフが与えられます。第1部の頂点には から までの、第2部の頂点委は から までの番号が振られています。各頂点の次数は です。
かつ を満たす整数4つ組 について、区間 または区間 に含まれる与えられたグラフの全ての頂点と、端点がこれらの区間どちらかに属する与えられたグラフの辺から成るグラフを と定義します。即ち、元のグラフから を得るには、 かつ を満たす全ての頂点 と、これらの頂点にくっついている全ての辺を削除しなければなりません。
かつ を満たす全ての整数の組 に対する *3 の和を計算してください。
入力
1行目には単一の整数 が与えられる、これは各部の頂点数である。
行が続き、各行はグラフの辺を表す。 行目には2個の整数 が与えられる、これらは 本目の辺の端点である。
与えられるグラフには多重辺はなく、各頂点はちょうど2本の接続辺を持つ。
出力
各テストケースについて単一の整数を出力せよ、その数とは、 かつ を満たす全ての整数の組 に対する の和である。
入出力例
5 4 6 4 9 2 6 3 9 1 8 5 10 2 7 3 7 1 10 5 8
314
F. Tower Defense
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
番目の地点の塔のマナ容量は でマナ再生率は です。初期状態 秒時点では、各塔のマナは最大値です。ある秒数立った時点で 番目の塔のマナ量が である場合、その 秒後には マナになります。
つのレベルにはモンスターが 体登場します。 体目のモンスターは 秒後に体力 で地点 にスポーンします。各モンスターは、座標が増加する方向に毎秒 ポイントずつ移動します。
モンスターが塔を通過するとき、塔はモンスターに ダメージを与えます、ここでの はモンスターの現在体力で、 はタワーの現在マナ量です。この値をモンスターの体力とタワーのマナ量から差し引きます。
残念なことに、塔を全て通過してしまうモンスターがいることもあります。Монокарпは、全ての塔を通過した後のモンスターの体力の総和を知りたいと思っています。
入力
1行目には単一の整数 が与えられる、これは塔の個数である。
続く 行の 行目には、2個の整数 が与えられる、これらは 番目の塔のマナ容量とマナ再生率である。
次の行には単一の整数 が与えられる、これはモンスターの数である。
続く 行の 行目には、2個の整数 が与えられる、これらは 体目のモンスターのスポーン位置と体力である。
モンスターはスポーン時間の昇順に並んでいるため、全ての について が成立する。
出力
単一の整数を出力せよ、その数とは全ての塔を通過した後のモンスターの体力の総和である。
入出力例
3 5 1 7 4 4 2 4 0 14 1 10 3 16 10 16
4
5 2 1 4 1 5 4 7 5 8 3 9 1 21 2 18 3 14 4 24 5 8 6 25 7 19 8 24 9 24
40