Codeforces Round #737 (Div. 2) 問題文和訳
- A. Ezzat and Two Subsequences / Ezzat и две подпоследовательности (500点)
- B. Moamen and k-subarrays / Moamen и k-подотрезки (1000点)
- C. Moamen and XOR / Moamen и XOR (1750点)
- D. Ezzat and Grid / Ezzat и таблица (2500点)
- E. Assiut Chess / Шахматы в Assiut (3000点)
A. Ezzat and Two Subsequences / Ezzat и две подпоследовательности (500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
数列 からいくつか(0個や全ての場合もあり)を削除することで数列 が得られるとき、 は の部分列であるといいます。
部分列の平均とは、この部分列の数値の合計を部分列の大きさで割ったものです。
例えば、 の平均は であるため、 となります。
入力
1行目には単一の整数 が与えられる、これはテストケース数である。各テストケースは2行から成る。
各テストケースの1行目には単一の整数 が与えられる。
2行目には 個の整数 が与えられる。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、単一の値を出力せよ、その値とはEzzatが達成できる最大値である。
絶対誤差または相対誤差が を越えなければ正解と見做される。
形式的には、提出解を 、ジャッジ解を とする。 であるとき、正答とみなされる。
入出力例
4 3 3 1 2 3 -7 -6 -6 3 2 2 2 4 17 3 5 -3
4.500000000 -12.500000000 4.000000000 18.666666667
注記
1つ目のテストケースでは、配列は です。この配列を分割する全ての方法は次のようなものです。
- 。このとき値は となる
- 。このとき値は となる
- 。このとき値は となる
従って、可能な最大値は となります。
2つ目のテストケースでは、配列は です。この配列を分割する全ての方法は次のようなものです。
- 。このとき値は となる
- 。このとき値は となる
従って、可能な最大値は となります。
B. Moamen and k-subarrays / Moamen и k-подотрезки (1000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- 各要素が正確に1つの連続部分列に属すように、配列をちょうど 個の空でない連続部分列に分割する
- これらの部分配列を任意に並び替える
- 新しい順序で部分配列を結合する
数列 の先頭からいくつか(0個や全ての場合もあり)の要素を削除し、末尾からいくつか(0個や全ての場合もあり)の要素を削除することで数列 が得られるとき、 は の連続部分列であるといいます。
上記の操作を正確に一度だけ行って、配列を非減少順に並び替える方法があるかどうか、Moamenに教えてください。
入力
1行目には単一の整数 が与えられる、これはテストケース数である。テストケースについての記述が続く。
各テストケースの1行目には2つの整数 が与えられる。
2行目には 個の整数 が与えられる。全ての数が相異なることは保証されている。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、単一の文字列を出力せよ。
Moamenが配列を非減少順に並び替えることができる場合、"YES
"(引用符なし)と出力せよ。そうでなければ、"NO
"(引用符なし)と出力せよ。
"YES
"と"NO
"の各文字はどの活字ケース(大文字/小文字)で出力してもよい。
入出力例
3 5 4 6 3 4 2 1 4 2 1 -4 0 -2 5 1 1 2 3 4 5
Yes No Yes
注記
1つ目のテストケースでは、 であり、次のように操作を行うことができます。
- を に分割する
- 並び替える:
- 結合する: これで配列はソートされた
2つ目のテストケースでは、配列を つの連続部分列に分割してソートを行う方法はありません。
例えば、配列を に分割した場合、 または のようにしか並び替えることができません。しかし、どちらの場合も、結合後の配列はソートされていません。
C. Moamen and XOR / Moamen и XOR (1750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
である場合、Moamenが勝ちます。
ここで はbit単位AND*3を、 はbit単位XOR*4を表します。
Moamenが勝つような配列 の個数を計算してください。
結果は非常に大きくなる可能性があるため、 で割った値を出力してください。
入力
1行目には単一の整数 が与えられる、これはテストケース数である。
各テストケースは2つの整数 を含む1行で構成される。
出力
各テストケースについて、単一の値を出力せよ、その値はMoamenが勝つような配列の個数である。
結果を modulo で出力せよ。
入出力例
3 3 1 2 1 4 0
5 2 1
注記
1つ目のテストケースでは、 です。結果として、可能な配列は で全てです。
Moamenはそのうち5つでのみ勝利します: 。
D. Ezzat and Grid / Ezzat и таблица (2500点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
グリッドの全ての連続する2行について、この2行に を持つような列が少なくとも1つ存在する場合、かつその場合のみグリッドは美しいといいます。
Ezzatは行数 と、数字 を含むグリッドの 個のセグメントを与えます。 各セグメントは3つの整数 で表され、 は行番号を、 はその行のセグメントの最初と最後の列を表します。
例えば、 で、セグメントが であるとき、グリッドは次のようになります。
グリッドを美しくするために削除しなければならない最小の行数をEzzatに伝えてください。
入力
1行目には2つの整数 が与えられる。
続く 行のそれぞれには3つの整数 が与えられる。これら 行のそれぞれは行番号 は 列目から 列目(両端含む)までに数字 を含んでいることを表す。
セグメントは重なることもあることに注意せよ。
出力
1行目には単一の整数 を出力せよ、これは削除しなければならない最小の行数である。
2行目には削除しなければならない行を表す 個の相異なる整数 をいずれかの順序で出力せよ。
解が複数ある場合は、そのいずれかを出力せよ。
入出力例
3 6 1 1 1 1 7 8 2 7 7 2 15 15 3 1 1 3 15 15
0
5 4 1 2 3 2 4 6 3 3 5 5 1 1
3 2 4 5
注記
1つ目のテストケースのグリッドは問題文で説明されているものです。このグリッドは次のような特性を持っています。
- 行目と 行目は列 に共通して を持つ
- 行目と 行目は列 に共通して を持つ
結果として、このグリッドは美しく、どの行も削除する必要はありません。
2つ目のテストケースでは、グリッドは次のようになります。
E. Assiut Chess / Шахматы в Assiut (3000点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
ICPC Assuit(أسيوط)*5 コミュニティ(以下、ICPC Assiut Community)がユニークなチェスの大会を開催することとなり、貴方はクイーンを操って隠れたキングを追い詰める役に選ばれました。キングはICPC Assiut Communityのメンバーがキングを操ります。
のチェス盤上で対戦を行い、行は上から下へ、列は左から右へと数字が振られていて、 行 列にあるマスは と表されます。
1手でクイーンを同一横線上、縦線上、斜線上のいずれかのマスに移動させることができます。例えば、クイーンが にあった場合、 *6 のいずれかに移動できます。クイーンは現在のマスに留まることはできないことに注意してください。
1手でキングは盤面から出ないように「右」「左」「上」「下」「右下」「左下」「左上」「右上」のいずれかに移動できます。キングはクイーンと同じ行、列、斜線上にあるマス(クイーン自身がいるマスを含む)に移動することはできません。例えば、キングがマス にいた場合、 に移動することができます。
ゲーム開始時に、クイーンを盤上の任意のマスに配置し、これはゲーム注意回のみ行われます。その後、クイーンとは異なる位置にキングが秘かに置かれます。貴方にはキングの位置は分かりません。その後、キングを先手として、キングとクイーンが交互に手を打ちます。キングは可能な方向(「右」「下」「上-左」など)に動き、その方向のみが貴方に伝えられます。そののち、クイーンが移動するマスを宣言し、クインを移動させなければなりません。このようにしてゲームは、貴方が勝つか、手番がなくなるまで続きます。
キングに有効な手がなくなれば貴方の勝ちです。 回クイーンを動かした後もキングに有効な手があれば、貴方の負けです。
入力
1行目には単一の整数 が与えられる、これはテストケース数である。
相互入出力
各テストケースにおいて、クイーンの開始位置を直ちに出力せよ。キングのいるマスにクイーンを置いた場合、直ちに勝利する。
その後、最大で 手を打つことができる。各手は という形式で行われる、ここで はそれぞれクイーンの亜tらしい行と列を表す2つの整数である。この手はクイーンの有効な手でなければならない。
最初のクイーンの配置の後や自分の手の後、キングの移動方向を表す文字列 を受け取る。これは次のうちのいずれかである: "Right
", "Left
", "Up
", "Down
", "Down-Right
", "Down-Left
", "Up-Left
", "Up-Right
"、もしくは勝利時の"Done
"。"Done
"は各テストケースの終わりとして考えよ。
クエリを出力した後、忘れず改行を出力し、出力をflushせよ。そうでなければIdleness limit exceededを得る。出力のflushのためには、次を利用せよ。
- C++の場合、
fflush(stdout)
やcout.flush()
- Javaの場合、
System.out.flush()
- Pascalの場合、
flush(output)
- Pythonの場合、
stdout.flush()
- 他の言語の場合は、ドキュメントを参照せよ
無効なクエリを出力したり、各テストケースで 個を超えるクエリを出力しようとした場合、ゲームは直ちに終了し、Wrong Answer判定となる。
入出力例
1 Left Right Done
7 5 7 6 7 7
注記
この入出力例では、開始時に隠れキングは にいました。ゲームは次のように続きます。