Codeforces Round #706 (Div. 2) 問題文和訳
- A. Split it! / Раздели! (500点)
- B. Max and Mex / Max и Mex (1000点)
- C. Diamond Miner / Добытчик алмазов (1500点)
- D. Let's Go Hiking / Идем в поход! (2000点)
- E. Garden of the Sun / Солнечный огород (2500点)
- F. BFS Trees / Деревья поиска в ширину (3000点)
A. Split it! / Раздели! (500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
ある日彼女は文字列と整数を見つけました。問題作成上級者である彼女はすぐに問題を思いつきました。
文字列 とパラメータ が与えられたとき、次を満たす 個の空でない文字列 が存在するかを調べなければなりません。
ここで は文字列の連結を表します。 を の反転文字列と定義します。例えば となります。上式では の部分を意図的に飛ばしていることに注意してください。入力
入力は複数のテストケースからなる。1行目には単一の整数 が与えられる、これはテストケースの数である。その後、テストケースの記述が続く。
各テストケースについての記述の1行目には2つの整数 が与えられる、これらは文字列 の長さとパラメータ である。
各テストケースについての記述の2行目には小文字英字からなる長さ の単一の文字列 が与えられる。
出力
各テストケースについて、 が見つかる場合は"YES
"(引用符なし)と出力せよ、そうでない場合は"NO
"(引用符なし)と出力せよ。
ケース(大文字小文字)はいかなる組み合わせで出力してよい。
入出力例
7 5 1 qwqwq 2 1 ab 3 1 ioi 4 2 icpc 22 0 dokidokiliteratureclub 19 8 imteamshanghaialice 6 3 aaaaaa
YES NO YES NO YES NO NO
注記
1つ目のテストケースでは が可能な解の1つのとなります。
3つ目のテストケースでは が可能な解の1つのとなります。
5つ目のテストケースでは が可能な解の1つのとなります。
B. Max and Mex / Max и Mex (1000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
次の操作を 回行います。
- として、要素 (切り上げ)を に追加する。集合内にこの数がすでにある場合も再び追加する。
ここで、多重集合の とは多重集合内の最大整数を表し、多重集合の とは多重集合内に現れない最小の非負整数を表します。例えば次のようになります。
回の操作を行った後の 内の異なる要素数を計算してください。
入力
入力は複数のテストケースからなる。1行目には単一の整数 が与えられる、これはテストケースの数である。その後、テストケースの記述が続く。
各テストケースについての記述の1行目には2つの整数 が与えられる、これらは多重集合 の初期サイズと操作を行う回数である。
各テストケースについての記述の2行目には異なる 個の整数 が与えられる、これらは多重集合の初期の要素である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて 回の操作を行った後の 内の異なる要素数を出力せよ。
入出力例
5 4 1 0 1 3 4 3 1 0 1 4 3 0 0 1 4 3 2 0 1 2 3 2 1 2 3
4 4 3 5 3
注記
1つ目のテストケースでは です。 が に追加され、 は となります。答えは です。
2つ目のテストケースでは です。 が に追加され、 は となります。答えは です。
C. Diamond Miner / Добытчик алмазов (1500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
採掘場は平面として表せます。 人の採鉱者はy軸上の 点とみなせます。採掘場には 個のダイアモンド鉱山があります。これらはx軸上の 点とみなせます。事情により原点(点 ) 上には採鉱者はおらず、ダイアモンド鉱山もありません。
どの採鉱者もちょうど1つのダイアモンド鉱山を採掘しなければなりません。採鉱者はホックを持っていて、それでダイアモンド鉱山を採掘します。点 にいる採鉱者がホックで点 にあるダイアモンド鉱山を採掘する場合、 のエネルギー(これらの点の間の距離)を採掘で消費します。採鉱者は移動できず、互いに助け合うこともできません。
このゲームの目的は採鉱者の消費するエネルギーの和を最小化することです。最小値を求めてくれませんか?
入力
入力は複数のテストケースからなる。1行目には単一の整数 が与えられる、これはテストケースの数である。その後、テストケースの記述が続く。
各テストケースについての記述の1行目には単一の整数 が与えられる、これは採鉱者や鉱山の数である。
つづく 行の各行にはスペースで区切られた2つの整数 が与えられる、これらは採鉱者や鉱山の位置を表す点 である。点 に採鉱者がいることを表す か、点 に鉱山があることを表す のいずれかである。複数の採鉱者や鉱山が同じ点に存在することもある。
原点上に点が存在しなことは保証される。x軸上にある点が 個で、y軸上にある点が 個であることは保証されている。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて単一の実数を出力せよ、その数は消費エネルギーの和の最小値である。
出力解は絶対誤差または相対誤差が を超えない場合正しいと見なされる。
形式的に、出力解を 、想定解を とする。出力解は であり、その場合に限り正解となる。
入出力例
3 2 0 1 1 0 0 -1 -2 0 4 1 0 3 0 -5 0 6 0 0 3 0 1 0 2 0 4 5 3 0 0 4 0 -3 4 0 2 0 1 0 -3 0 0 -10 0 -2 0 -10
3.650281539872885 18.061819283610362 32.052255376143336
注記
1つ目のテストケースでは、採鉱者は と にいて、ダイヤモンド鉱山は と にあります。図のようにダイヤモンド鉱山を採鉱者が採掘するように配分すると、エネルギーの和 が得られます。
D. Let's Go Hiking / Идем в поход! (2000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
順列 が紙面上に左から右へ書かれています。まず、青山が整数インデックス を選び、Danielに伝えます。そののち、Danielは他の整数インデックス を選びます。
ゲームは通常のターン制で進行し、青山が先手です。ルールは以下の通りです。
- 青山のターン: の値を を同時に満たすような に変化させなければならない
- Danielのターン: の値を を同時に満たすような に変化させなければならない
手を打てなくなった人が負け、もう1人が勝ちます。青山のファンである貴方は、両プレイヤーが最適なプレイをしたときに青山が勝てるような の個数を計算するように求められている。
入力
1行目は単一の整数 が与えられる、これは順列の長さである。
2行目には 個の異なる整数 が与えられる、これらは順列である。
出力
青山が勝つように選択できる の値の数を出力せよ。
入出力例
5 1 2 5 4 3
1
7 1 2 4 6 5 3 7
0
注記
1つ目のテストケースでは、青山が勝つには を選ぶしかないので、答えは となります。
2つ目のテストケースでは、青山が を選ぶと、Danielは を選ぶことができます。第1ターン(青山のターン)で青山は を選んで を に変えます。第2ターン(Danielのターン)でDanielは を選んで を に変えます。この時点で なので青山は を選ぶことができません。そのため、青山の負けとなります。
E. Garden of the Sun / Солнечный огород (2500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
太陽の庭は 行 列の長方形の表で、表の各セルは農地になっています。全ての表には向日葵が生えいます。残念なことに、ある日の夜、雷がいくつかの(ゼロの可能性もある)セルに落ち、そのセルの向日葵は焼けて灰になってしまいました。言い換えると、雷が落ちたセルは空になってしまいました。不思議なことに、どの2つの空のセルも共有点(辺も角も)を持ちません。
さて、所有者はいくつかの(ゼロの可能性もある)向日葵を取り除くことで次の2つの目標を達成したいと考えています。
- 空のセル上にいる時は他のどの空のセルにも歩いていける。言い換えれば、これらの空のセルは連結である
- 任意の2つの空のセルの間にはちょうど1つの単純パスが存在する。言い換えれば、空のセル間にはサイクルが存在しない
空のセルから他の空のセルへは辺を共有していれば移動できます。
所有者の要求をすべて満たすような解を彼女に提示していただけませんか?
向日葵を植えることは許可されていないことに注意してください。取り除く向日葵の数を最小化する必要はありません。答えが常に存在することは証明することができます。
入力
入力は複数のテストケースからなる。1行目には単一の整数 が与えられる、これはテストケースの数である。その後、テストケースの記述が続く。
1行目には2つの整数 が与えられる、これらは行と列の数である。
つづく 行の各行には 文字が与えられる。各文字は'X
'か'.
'であり、それぞれ空のセルと向日葵の生えているセルを表している。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて 行出力せよ。各行には表の1行を表す 文字を出力せよ。各文字はそれぞれ空のセルと向日葵の生えているセルを表す、'X
'か'.
'でなければならない。
答えが複数ある場合、そのうちのいずれを出力してもよい。答えが常に存在することは証明できる。
入出力例
5 3 3 X.X ... X.X 4 4 .... .X.X .... .X.X 5 5 .X... ....X .X... ..... X.X.X 1 10 ....X.X.X. 2 2 .. ..
XXX ..X XXX XXXX .X.X .X.. .XXX .X... .XXXX .X... .X... XXXXX XXXXXXXXXX .. ..
注記
ここでは で 行 列のセルを表すことにします。
次の図では、白、黄、青のセルは、それぞれ向日葵が咲いているセル、雷が落ちたセル、向日葵を取り除いたセルを削除するセルを表しています。
1つ目のテストケースでは の向日葵を取り除くことが可能解の1つです。
他の可能解として の向日葵を取り除くことがあります。
この出力は任意のセルの組の間には2つの単純パスが存在(サイクルが存在)するため、間違いです。例えば、 と の間には2つの単純パスが存在します。
この出力では から へ歩くことができないので不正解です
F. BFS Trees / Деревья поиска в ширину (3000点)
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
グラフが与えられたとき、 を同時に頂点 を根とするBFS木と を根とするBFS木であるような、このグラフの全域木の数と定義します。
頂点 辺の連結無向グラフが与えられます。全ての について をmodulo で計算してください。
入力
1行目には2つの整数 が与えられる、これらは頂点数と辺の本数である。
つづく 行のうち 行は目には2つの整数 が与えられる、これは と を結ぶ辺を表す。
全ての辺が異なり、グラフが連結されていることは保証されている。
出力
行出力せよ、各行は 個の整数からなる。
行 列に出力される整数は でなければならない。
入出力例
4 4 1 2 2 3 3 4 1 4
2 1 0 1 1 2 1 0 0 1 2 1 1 0 1 2
8 9 1 2 1 3 1 4 2 7 3 5 3 6 4 8 2 3 3 4
1 0 0 0 0 0 0 0 0 2 0 0 0 0 2 0 0 0 1 0 1 1 0 0 0 0 0 2 0 0 0 2 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 2 0 0 0 0 2 0 0 0 0 2 0 0 0 2
注記
次の図は1つ目の例を説明するものです。
赤い辺のある木は を根とするBFS木でもあり を根とするBFS木でもあります。
同様にして他の隣接する頂点のペアについてのBFS木もこのようにして生成することができます。