Codeforces Round #714 (Div. 2) 問題文和訳
- A. Array and Peaks / Массив и пики (500点)
- B. AND Sequences / Последовательности И (1250点)
- Add One / Добавь единицу (1500点)
- D. GCD and MST / НОД и МОД (2000点)
- E. Cost Equilibrium / Ценовой баланс (2750点)
- F. Swapping Problem / Задача об обмене (3500点)
A. Array and Peaks / Массив и пики (500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
2つの整数 が与えられるので、ちょうど 個のピークをもつ から までの数の順列 を構築してください。大きさ の配列 のインデックス は かつ かつ であるとき、ピークといいます。そのような順列が存在しない場合は、 と出力してください。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
それから 行が続き、そのそれぞれには空白で区切られた2つの整数 が与えられる、これらは配列の長さとピークの数である。
出力
行出力せよ。各テストケースについて、与えられた長さとピークの数を持つ順列がない場合は、 と出力せよ。そうでない場合は、 から までの数の順列を形成し、ちょうど 個のピークを持つような空白で区切られた 個の整数を1行に出力せよ。
答えが複数存在する場合、そのいずれかを出力せよ。
入出力例
5 1 0 5 2 6 6 2 1 6 1
1 2 4 1 5 3 -1 -1 1 3 6 5 4 2
注記
入出力例の2つ目のテストケースでは、配列 となります。ここでインデックス と がピークとなります。これは で、 であるからです。
B. AND Sequences / Последовательности И (1250点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
大きさ の配列 が与えられます。列 がよい配列となるような から までの数の順列 の個数を求めて下さい。この数は大きくなる可能性があるので、modulo で出力してください。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
各テストケースの1行目には単一の整数 が与えられる、これは配列の大きさである。
各テストケースの2行目には 個の整数 が与えられる、これらは配列の要素である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
行出力せよ、ここで、 行目には 番目のテストケースでの良い順列の個数を で割った余りを出力せよ。
入出力例
4 3 1 1 1 5 1 2 3 4 5 5 0 2 0 3 0 4 1 3 5 1
6 0 36 4
注記
1つ目のテストケースでは、全ての数が同じなので、どのような順列をとっても良い配列になります。 から までの数の順列は次のように合計で 通り存在します: 。
2つ目のテストケースでは、よい配列となるような順列が存在しないことを証明することができます。
3つ目のテストケースでは、よい配列となるような順列が合計で 通り存在しますそのうち1つが順列 であり、このとき列は となります。これがよい配列となるのは以下の通りです。
Add One / Добавь единицу (1500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
1回の操作では、数の各桁 を の十進数表現に置き換えなければなりません。例えば、 は1回の操作を適用させると となります。
回の操作を適応させた後の の長さを求めなければなりません。この数は大きくなる可能性があるので、modulo で出力してください。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
各テストケースの唯一の行には2つの整数 が与えられる、これらは初期状態の数と操作回数である。
出力
各テストケースについて結果として得られる数の長さを で割った余りを出力せよ。
入出力例
5 1912 1 5 6 999 1 88 2 12 100
5 2 6 4 2115
注記
1つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
2つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
3つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
4つ目のテストケースについて、 は 回の操作の後 となり、その長さは となります。
D. GCD and MST / НОД и МОД (2000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- である場合、 から の間に重さ の辺が存在する
- である場合、 と の間に重さ の辺が存在する
ここで は整数 の最大公約数(greatest common divisor, GCD)*2を表します。
上記の条件の両方を満たす場合、 と の間には多重辺が存在し、何方の条件も満たさない場合、 と の間には辺が存在しないことに注意してください。
目標は、このグラフの最小全域木(minimum spanning tree, MST)*3の重みを求めることです。
入力
入力の1行目には単一の整数 が与えられる、これはテストケース数である。
各テストケースの1行目には2つの整数 が与えられる、これらは頂点数とパラメータ である。
各テストケースの2行目には 個の整数 が与えられる、これらは配列の要素である。
全てのテストケースでの の和が を超えないことは保証されている。
出力
行出力せよ。各テストケースでについて対応するグラフの重さを出力せよ。
入出力例
4 2 5 10 10 2 5 3 3 4 5 5 2 4 9 8 8 5 3 3 6 10 100 9 15
5 3 12 46
注記
ここでは、例題の4つのテストケースのグラフを示しています(グラフの可能なMSTの辺はピンク色で示されています)。
テストケース1について
テストケース2について
テストケース3について
テストケース4について
E. Cost Equilibrium / Ценовой баланс (2750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
以下の手順で、配列を任意の回数変換することができます。
- 2つのインデックス と整数 を選ぶ。 をソースインデックス、 をシンクインデックスとする
- 番目の要素を だけ減らし、 番目の要素を だけ増やす。 番目と 番目で得られる値はそれぞれ となる
- この操作のコストは である
- ここで、 がシンクインデックス、 がソースインデックスになることはなくなる
変換の総コストはステップ の全てのコストの合計です。
例えば、配列 は総コスト で美しい配列 に変換できます。
美しい配列に変換することができ、その変換のコストが一意に定まる配列をバランス型といいます。言い換えれば、美しい配列に変換するための最小のコストは、最大のコストに等しいものです。
非負整数から成る長さ の配列 が与えられます。貴方の仕事は、与えられた配列の並べ替えであるバランス型の配列の数を求めることです。要素が異なる位置が存在する場合2つの配列は異なる配列とみなされます。答えが大きくなる可能性があるため、modulo で出力して下さい。
入力
1行目には単一の整数 が与えられる、これは配列の大きさである。
2行目には 個の整数 が与えられる。
出力
単一の整数を出力せよ、これはバランス型である並び替えの数を で割った余りである。
入出力例
3 1 2 3
6
4 0 4 0 4
2
5 0 11 12 13 14
120
注記
1つ目の入出力例では、値 のインデックスをソース、値 のインデックスをシンクと考えることができるので、 は有効な並び替えです。したがって、変換後は美しい配列 となり,総コストは となります。これが美しい配列になる唯一の変換であることを示すことができます。同様に他の並び替えについても調べることができます。
2つ目の入出力例では、 と がバランス型である並び替えです。
3つ目の入出力例では、すべての並び替えがバランス型です。
F. Swapping Problem / Задача об обмене (3500点)
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
入力
1行目には単一の整数 が与えられる。
2行目には 個の整数 が与えられる。
3行目には 個の整数 が与えられる。
出力
の最小値を出力せよ。
入出力例
5 5 4 3 2 1 1 2 3 4 5
4
2 1 3 4 2
2
注記
1つ目の入出力例では、配列 の1番目と5番目の要素を入れ替えて にすることができます。
従ってその和の可能な最小値は となります。
2つ目の入出力例では、1番目と2番目の要素を入れ替えることができます。つまり、答えは となります。