Codeforces Round #703 (Div. 2) 問題文和訳
- A. Shifting Stacks / Сдвигая стопки (500点)
- B. Eastern Exhibition / Восточная выставка (1000点)
- C1. Guessing the Greatest (easy version) / Найти наибольшее (простая версия) (750点) C2. Guessing the Greatest (hard version) / Найти наибольшее (сложная версия) (750点)
- D. Max Median / Максимальная медиана (1750点)
- E. Paired Payment / Парный платёж (2250点)
- F. Pairs of Paths / Пары путей (3000点)
A. Shifting Stacks / Сдвигая стопки (500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
スタックの数は常に 個であることに気を付けてください。ブロックの数が 個になってもスタックは消えません。
入力
1行目には単一の整数 が与えられる、 はテストケースの個数である。
各テストケースの1行目には単一の整数 が与えられる。各テストケースの2行目には 個の整数 が与えられる、これらの数はスタックの高さである。
全ての の和が を超えないことは保証されている。
出力
各テストケースについて高さの列を狭義単調増加にすることができる場合YES
を、そうでない場合NO
を出力せよ。
大文字小文字はどの組み合わせでもよい(例えば、YES
、Yes
、yes
、yEs
はどれもYES
とみなされる)。
入出力例
6 2 1 2 2 1 0 3 4 4 4 2 0 0 3 0 1 0 4 1000000000 1000000000 1000000000 1000000000
YES YES YES NO NO YES
注記
1つ目のテストケースでは、手を打つ必要はありません、最初から高さの列は増加列です。
2つ目のテストケースでは、ブロックを1つ、1つ目のスタックから2つ目のスタックへ移動させる必要があります。そうすれば、高さは となります。
3つ目のテストケースでは、ブロックを1つ、1つ目のスタックから2つ目のスタックへ移動させ、2つ目のスタックから3つ目のスタックへ移動させると、高さは となります。
4つ目のテストケースでは、何も手を打つことができませんが、列は増加列ではないため、答えはNO
となります。
5つ目のテストケースでは、たった1手(2番目のスタックから3番目のスタックへの移動)しかすることができず、このとき高さは となります。 も も増加列ではないため、答えはNO
となります。
B. Eastern Exhibition / Восточная выставка (1000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
入力
1行目には単一の整数 が与えられる、 はテストケースの個数である。
各テストケースの1行目には単一の整数 が与えられる。続く 行には家の位置 が与えられる。
全ての の和が を超えないことは保証されている。
出力
各テストケースについて単一の整数を出力せよ、その整数とは、博覧会を建てることのできる位置の数である。博覧会はいずれかの家と同じ地点に立てることも可能である。
入出力例
6 3 0 0 2 0 1 2 4 1 0 0 2 2 3 3 1 4 0 0 0 1 1 0 1 1 2 0 0 1 1 2 0 0 2 0 2 0 0 0 0
1 4 4 4 3 1
注記
以下にテストケースの例の図を示します。青点は家を、緑点は博覧会を建てる可能性のある位置を表しています。
1つ目のテストケースです。
2つ目のテストケースです。
3つ目のテストケースです。
4つ目のテストケースです。
5つ目のテストケースです。
6つ目のテストケースです。2つの家のどちらも に位置しています。
C1. Guessing the Greatest (easy version) / Найти наибольшее (простая версия) (750点)
C2. Guessing the Greatest (hard version) / Найти наибольшее (сложная версия) (750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
この問題はインタラクティブ問題です。
異なる 個の数から成る配列 があります。1回のクエリで部分列 内で2番目に大きい要素の位置を尋ねることができます。40(イージー版)/20(ハード版)回以内のクエリで配列内の最大要素の位置を求めてください。
部分列 は の要素全てです。この部分列について尋ねると、この部分列内で2番目に大きい要素の全体配列内の位置が与えられます。
入力
1行目には単一の整数 が与えられる、 は配列の長さである。
相互入出力
""と出力することでクエリを投げることができる。その返答は の全ての要素内の2番目に大きい要素のインデックスである。配列 は予め固定されていて、相互入出力の際に変わることはない。
""と出力することで答えを出力することができる、ここで とは配列内の最大要素のインデックスである。
40(イージー版)/20(ハード版)回までクエリを投げることができる。答えの出力はクエリとしてカウントされない。
クエリの出力後、改行出力、出力バッファのflushを忘れないようにせよ。そうでなければ Idleness limit exceeded
となる。出力バッファのflushのためには次を利用せよ。
ハックケース
ハックを行うには、次のテスト形式に従いなさい。
1行目に単一の整数 を出力せよ。2行目に 個の整数 から の順列を出力せよ。 の位置が最大値の位置となる。
入出力例
5 3 4
? 1 5 ? 4 5 ! 1
注記
このサンプルでは が であるとします。部分列 について尋ねた場合、 が2番目に大きい要素で、その位置は となります。部分列 について尋ねた場合、 が2番目に大きい要素で、その位置は となります。
同じ相互入出力をする他の配列 がありますが、答えは異なる可能性があります。出力例は相互入出力の理解のためにを示されています。
D. Max Median / Максимальная медиана (1750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
長さ の配列の中央値は、要素を昇順に並べ替えたのちの の場所に位置する要素です。例えば *1となります。
部分列 はある についての配列 であり、その長さは です。
入力
1行目には2つの整数 が与えられる。
2行目には 個の整数 が与えられる。
出力
1つの整数 を出力せよ、 とは得られる中央値の最大値である。
入出力例
5 3 1 2 3 2 1
2
4 2 1 2 3 4
3
注記
1つ目の例では、可能な部分列は で全てであり、それらの中央値は全て であるため、得られる中央値の最大値も です。
2つ目の例では、 となります。
E. Paired Payment / Парный платёж (2250点)
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
入力
1行目には2つの整数 が与えられる。
続く 行には3つの整数 が与えられる。多重辺がないこと、すなわち、任意の辺 に対して や となる他の辺が存在しないことは保証されている。
出力
各都市 について1つの整数を出力せよ。 と との間に有効なパスが存在しない場合、 を出力せよ。そうでない場合、 から へ行くために必要な最低金額を出力せよ。
入出力例
5 6 1 2 3 2 3 4 3 4 5 4 5 6 1 5 1 2 4 2
0 98 49 25 114
3 2 1 2 1 2 3 2
0 -1 9
注記
1つ目の例のグラフは次のようになります。
2つ目の例では から へのパスは を通り、結果として、 を支払います。
F. Pairs of Paths / Пары путей (3000点)
テストごとのメモリ制限: 512 MB
入力: 標準入力
出力: 標準出力
入力
1行目には単一の整数 が与えられる。
続く 行には木についての記述がなされる。各行には、頂点 と頂点 間の辺を表す2つの整数 が与えられる。
次の行には単一の整数 が与えられる。
続く 行にはパスについての記述がなされる。各行には、2つの端点 によってパスが表される。与えられたパスは から までの最短パス ( 自身も含む)を表す。
出力
1つの整数を出力せよ、その整数は正確に1つの頂点で交差するパスの組の個数である。
入出力例
5 1 2 1 3 1 4 3 5 4 2 3 2 4 3 4 3 5
2
1 3 1 1 1 1 1 1
3
5 1 2 1 3 1 4 3 5 6 2 3 2 4 3 4 3 5 1 1 1 2
7
注記
1つ目の例の木とパスは上のようになります。組 と が1つの頂点で交差します。
2つ目の例では3つの全てのパスが同じ単一の頂点を含むため、組 の全てが1つの頂点で交差します。
3つ目の例は1つ目の例に2つのパスを追加したものです。組 の全てが1つの頂点で交差します。