Codeforces Round #702 (Div. 3) 問題文和訳
- A. Dense Array / Плотный массив
- B. Balanced Remainders / Сбалансированные остатки
- C. Sum of Cubes / Сумма кубов
- D. Permutation Transformation / Трансформация перестановки
- E. Accidental Victory / Случайная победа
- F. Equalize the Array / Уравняй массив
- G. Old Floppy Drive / Старый дисковод
A. Dense Array / Плотный массив
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
例えば、配列 や は密です。また、配列 や は密ではありません。
整数からなる配列 が与えられます。配列を密にするために追加する必要な数は最小で何個でしょうか? 配列内の任意の場所に数値を挿入することができます。もし配列が既に密であるなら、数を追加する必要はありません。
例えば のとき、答えは であり、要素を挿入した配列は次のようになります: (このような を構成する方法は他にもあります)
入力
1行目には1つの整数 が与えられる。その後、 個のテストケースが続く。
各テストケースの1行目には1つの整数 が与えられる、 は配列 の長さである。
次の行には 個の整数 が与えられる。
出力
各テストケースについて単一の整数を出力せよ、その整数は配列を密にするために追加する数の最小数である。
入出力例
6 4 4 2 10 1 2 1 3 2 6 1 3 1 4 2 5 1 2 3 4 3 12 4 31 25 50 30 20 34 46 42 16 15 16
5 1 2 1 0 3
注記
1番目のテストケースは問題文で説明されています。
2番目のテストケースでは、1つの要素を挿入して密にできます:
3番目のテストケースでは、2つの要素を挿入して密にできます:
4番目のテストケースでは、1つの要素を挿入して密にできます:
5番目のテストケースでは、配列 は既に密です。
B. Balanced Remainders / Сбалансированные остатки
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
配列 のうち、 で割った時のあまりが である数の個数をそれぞれ とします。 が等しい配列 はバランスのとれた剰余を持つと呼ぶことにします。
例えば、 で であるとき、次のような一連の手番が可能です。
- 最初は で、これらの値は互いに等しくはない。 を1増やして、配列 となる。
- で、これらの値は互いに等しくはない。 を1増やして、配列 となる。
- で、これらの値は互いに等しくはない。 を1増やして、配列 となる。
- で、これらの値は互いに等しく、配列 はバランスのとれた剰余を持つこととなる。
配列 がバランスのとれた剰余を持つようにするために必要な手番の数の最小値を求めてください。
入力
1行目には1つの整数 が与えられる。その後、 個のテストケースが続く。
各テストケースの1行目には1つの整数 が与えられる、 は配列 の長さである。数 は で割り切れることは保証されている。
次の行には 個の整数 が与えられる。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて単一の整数を出力せよ、その整数は配列 がバランスのとれた剰余を持つようにするために必要な手番の最小数である。
入出力例
4 6 0 2 5 5 4 8 6 2 0 2 1 0 0 9 7 1 3 4 2 10 3 9 6 6 0 1 2 3 4 5
3 1 3 0
注記
1番目のテストケースは問題文で説明されています。
2番目のテストケースでは という1手を行う必要があります。
3番目のテストケースでは3手必要です
- 第1手:
- 第2手:
- 第3手:
4番目のテストケースでは の値が最初から等しく、配列 はバランスのとれた剰余を持っています。
C. Sum of Cubes / Сумма кубов
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
形式的には となるような2つの整数 が存在するか確かめなければなりません。
例えば、 のとき、 が適当な例となります 。 のときは、適当な の組は存在しません。
入力
1行目には1つの整数 が与えられる、 はテストケースの数である。その後、 個のテストケースが続く。
各テストケースでは1つの整数 が与えられる。
-bit整数型に収まらないテストケースの入力が存在するためプログラミング言語の -bit以上の整数型を用いる必要があることに注意せよ。
出力
各テストケースについて個別の行に出力せよ。
- が2つの正整数の立方の和にとして表現できる場合: "
YES
" - そうでない場合: "
NO
"
"YES
"と"NO
"の大文字小文字はいかなる組み合わせでもよい(例えば文字列yEs
、yes
、Yes
、YES
はどれもYES
とみなされる)。
入出力例
7 1 2 4 34 35 16 703657519796
NO YES NO NO YES YES YES
注記
数 は2つの立方数の和として表現することはできません。
数 は として表現することができます。
数 は2つの立方数の和として表現することはできません。
数 は2つの立方数の和として表現することはできません。
数 は として表現することができます。
数 は として表現することができます。
数 は として表現することができます。
D. Permutation Transformation / Трансформация перестановки
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
Поликарпは最近、長さ の配列 を貰いました。Поликарпは順列よりも木が好きなので順列 を根附き二分木に変換したいと思っています。彼は異なる整数の配列を次のようにして木に変換させます。
- 配列の最大要素が木の根になる
- 最大値の左側にあるすべての要素は、左側部分木を形成する(配列の左部分に同じルールを適用して構築される)が、最大値より左に要素がない場合根は左側の子をもたない
- 最大値の右側にあるすべての要素は、右側部分木を形成する(配列の右部分に同じルールを適用して構築される)が、最大値より右に要素がない場合根は左側の右をもたない
例えば、彼が順列 から木を構築する場合、根は要素 となり、左側部分木は部分列 から構築される木となり、右側部分木は部分列 から構築される木となります。結果として、次のような木が構築されます。
他の例として順列を としてみましょう。この場合、木は次のようになります。
頂点 の深さ、すなわち、根から の番号のついた頂点までのパス上の辺の数を とします。根の深さは0であることに注意してください。順列 が与えられた時、各頂点について の値を求めてください。
入力
1行目には1つの整数 が与えられる、 はテストケースの数である。その後、 個のテストケースが続く。
各テストケースの1行目には1つの整数 が与えられる、 は順列の長さである。
そののち、 個の数 が続く、これらは順列 である。
出力
各テストケースについて 個の値を出力せよ、その値とは である。
入出力例
3 5 3 5 2 1 4 1 1 4 4 3 1 2
1 0 2 3 1 0 0 1 3 2
E. Accidental Victory / Случайная победа
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
チャンピオンシップは次のルールの下で行われる 試合で構成されています。
最後に残ったトークン数が0でない選手がこのチャンピオンシップの優勝者となります。
チャンピオンシップ中に行われる無作為抽選は等確率で独立して行われます。
例えば、 のとき、試合の展開のうちの1つは次のようになります(他の可能性もあり得る)。
- 第1試合で第1選手と第4選手が選ばれた。第4選手がより多くのトークンを持っているため、第1選手のトークンを全てもらう。ここで
- 第2試合で第3選手と第4選手が選ばれた。トークン数は同数であるが、無作為抽選により第3選手が勝者となる。ここで
- 第3試合で第2選手と第3選手が選ばれた。第3選手がより多くのトークンを持っているため、第1選手のトークンを全てもらう。ここで
- 第3選手がチャンピオンシップの優勝者となる
チャンピオンシップの優勝者には名前入りの賞品が送られます。そこで、審査員はどの選手が優勝する可能性があるのか、すなわち、0でない優勝確率があるのかを事前に知りたいと思っています。そのような選手をすべて見つけてください。
入力
1行目には1つの整数 が与えられる、 はテストケースの数である。その後、 個のテストケースが続く。
各テストケースの1行目には1つの整数 が与えられる、 はチャンピオンシップの選手数である。
各テストケースの1行目には 個の正整数 が与えられる、これらは選手の持っているトークンの枚数である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについてチャンピオンシップでの優勝確率が0でない選手の数を出力せよ。次の行にはそのような選手の番号を昇順で出力せよ。選手には入力に現れた順に番号が1から順に振られている。
入出力例
2 4 1 2 4 3 5 1 1 1 1 1
3 2 3 4 5 1 2 3 4 5
F. Equalize the Array / Уравняй массив
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
例えば、 のとき、配列を美しくするために以下のような操作が可能です。
- Поликарпは の場所の要素を削除する。配列 は となる
- Поликарпは の場所の要素を削除する。配列 は となる
- Поликарпは の場所の要素を削除する。配列 は となる
Поликарпのため、配列 を美しくするために削除しなければならない要素の最小数を求めてください。
入力
1行目には1つの整数 が与えられる、 はテストケースの数である。その後、 個のテストケースが続く。
各テストケースの1行目には1つの整数 が与えられる、 は配列 の長さである。
各テストケースの2行目には 個の数 が与えられる、これらは配列 である。
全てのテストケースでの の和は を超えないことが保証されている。
出力
各テストケースについて単一の整数を出力せよ、その整数は配列 を美しくするために必要な削除する要素の最小数である。
入出力例
3 6 1 3 2 1 4 2 4 100 100 4 100 8 1 2 3 3 3 2 6 6
2 1 2
G. Old Floppy Drive / Старый дисковод
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
Поликарпはディスクの数字を配列 に書きました。ドライブは次のようなアルゴリズムに従って動作することが分かりました。
- ドライブは1つの正数 を入力として受け取り、配列 の最初の要素へのポインタを置く
- その後、ドライブはディスクを回転させ始め、毎秒ポインタを次の要素へ移動させ、ポインタが指してきた要素の和を数える。ディスクは丸いため、配列 では最後の要素の次に最初の要素が続く
- 和が 以上になるとドライブはシャットダウンする
Поликарпはドライブ操作についてもっと知りたいと思いましたが、彼には自由な時間が全くありません。そこで彼は 個の質問をしてきました。 番目の質問に答えるためには、ドライブに入力として を与えたときドライブは何秒間動作するかを調べる必要があります。ドライブが無限に動作する可能性があることに注意してください。
例えば、 のとき、質問への答えは次のようになります。
- 第1クエリへの答えは となる: ドライブが最初の要素にポインタを向け、最初の和が となる
- 第2クエリへの答えは となる: ドライブがちょうど2回ディスクを回転させ、和が となる
- 第3クエリへの答えは となる: 和は である
入力
1行目には1つの整数 が与えられる、 はテストケースの数である。その後、 個のテストケースが続く。
各テストケースの1行目には2つの整数 が与えられる、それらはディスクに書かれた数字の数と質問数である。
各テストケースの2行目には 個の数 が与えられる。
各テストケースの3行目には 個の数 が与えられる。
全てのテストケースでの や の和が を超えないことは保証されている。
出力
各テストケースについて、各行に 個の整数を出力せよ。 番目の整数は以下の通りである。
- ドライブが永遠に動作する場合:
- そうでない場合: ドライブが動作する秒数
入出力例
3 3 3 1 -3 4 1 5 2 2 2 -2 0 1 2 2 2 0 1 1 2
0 6 2 -1 -1 1 3