Codeforces Round #705 (Div. 2) 問題文和訳
- A. Anti-knapsack / Антирюкзак (750点)
- B. Planet Lapituletti / Планета Лапитулетти (1250点)
- C. K-beautiful Strings / K-красивые строки (1750点)
- D. GCD of an Array / НОД массив (2250点)
- E. Enormous XOR / Огромный XOR (2750点)
- F. Enchanted Matrix / Заколдованная матрица (3250点)
A. Anti-knapsack / Антирюкзак (750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
集合の部分集合とはその集合から要素をいくつか(全てでもよいし0個でもよい)取り除くことで得られる集合のことです。
入力
1行目にはテストケース数 が与えられる。
つづく 行の各行には2つの整数 が与えられる、これらがテストケースについての説明である。
出力
各テストケースについて2行出力せよ。1行目には単一の整数 を出力せよ、これは選んだ整数の個数である。
2行目には から までの 個の異なる整数を出力せよ、これらが選んだ整数である。
もし答えが複数ある場合、そのいずれを出力してよい。数についてはどのような順序でもよい。
入出力例
3 3 2 5 3 1 1
2 3 1 3 4 5 2 0
B. Planet Lapituletti / Планета Лапитулетти (1250点)
テストごとのメモリ制限:256 MB
入力: 標準入力
出力: 標準出力
HH:MM
(最初に時数が十進法で表示され、その後(コロンの後)に十進法での分数が続く。時数と分数は2桁で表示されるため必要に応じて頭に0がつく)という形式で表示されます。時数は から まで、分数は から までの番号がつけられている。
惑星Lapitulettiでは標準的な鏡が使われています。住民はよく鏡に映ったデジタル時計を見ますが、反射した時計が有効な時刻を示していると幸せな気分になります(つまり、反射した数字が有効であり、そのような反射時刻が1日のある瞬間に普通の時計が示すものであるときです)。
鏡に映った時計の像は縦線に対して反射します。
惑星Lapitulettiのある住民は時刻 に時計の鏡像を皆締め、次に反射時刻が有効なものになる最も近い瞬間(次の日になる可能性もある)はいつなのか知りたいと思っています。
任意の についてそのような瞬間が存在することは示すことができます。この住民が時計を見始めた瞬間に反射時刻が有効である場合、その瞬間が最も近いものとみなされます。
いくつかのテストケースについて問題を解いてください。
入力
1行目には が与えられる、これはテストケース数である。
つづく 行にはテストケースについての記述が与えられる。各テストケースの記述は2行からなる。
テストケースの1行目には2つの整数 が与えられる。
2行目には開始時刻 がHH:MM
の記述形式で与えられる。
出力
各テストケースについて反射時刻が正しくなる最近瞬間をHH:MM
の形式でそれぞれの行に出力せよ。
入出力例
5 24 60 12:21 24 60 23:59 90 80 52:26 1 100 00:01 10 10 04:04
12:21 00:00 52:28 00:00 00:00
注記
2つ目のテストケースでは23:59
の反射が不正であり、次の日の00:00
の反射が正当であることが簡単にわかります。
C. K-beautiful Strings / K-красивые строки (1750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
文字列 が文字列 よりも辞書順で小さいとは、次の条件のいずれかを満たし、かつそのような場合のみです。
- が の接頭辞であるが、 である場合
- と が異なるような最初の位置において、文字列 の文字がアルファベット順で文字列 の文字よりも先に出てくる場合
入力
1行目には が与えられる、これはテストケース数である。
つづく 行にはテストケースについての記述が与えられる。各テストケースの記述は2行からなる。
テストケースの1行目には2つの整数 が与えられる、これらは文字列の の長さと数 である。
2行目には小文字英字からなる文字列 が与えられる。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、長さ の美しい文字列で辞書順で 以上のもののうち最小のものを出力せよ、そのような文字列が存在しない場合 を出力せよ。
入出力例
4 4 2 abcd 3 1 abc 4 3 aaaa 9 3 abaabaaaa
acac abc -1 abaabaaab
注記
1つ目のテストケースでは、"acac
"は 以上であり、その中には各文字は 回か 回出現するため美しいです。
2つ目のテストケースでは、 の中には各文字は 回か 回出現するため 自身が答えになります。
3つ目のテストケースでは、適切な文字列が存在しないことを示すことができます。
4つ目のテストケースでは、"abaabaaab
"の中には各文字は 回か 回、 回出現すします。全ての整数は で割り切れます。
D. GCD of an Array / НОД массив (2250点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
各クエリを処理した毎に、配列 の全要素の最小公約数(GCD)*1を出力しなければなりません。
答えは大きくなりすぎることもあるため、modulo で出力してください。
入力
1行目には2つの整数 が与えられる。
2行目には 個の整数 が与えられる、これらは変化前の配列 の要素である。
つづく 行には次の形式でクエリが与えられる: 各行に2つの整数 が与えられる。
出力
行出力せよ、各クエリを処理した後の全要素のGCDのmodulo を各行に出力せよ。
入出力例
4 3 1 6 8 12 1 12 2 3 3 3
2 2 6
E. Enormous XOR / Огромный XOR (2750点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
を出力してください。
入力
1行目には単一の整数 が与えられる、これは の2進数表現での長さである。
2行目には の二進数表現が与えられる、これは と の数字からなる長さ の文字列である。
3行目には の二進数表現が与えられる、これは と の数字からなる長さ の文字列である。
であることは保証されている。 の二進数表現には余分なleading zeroは含まれない( のときは二進数表現は単一のゼロから成る)。 の二進数表現は長さが になるようにleading zeroが附けられる。
出力
与えられた と の組に対する の値を、余分なleading zeroを除いた二進数表現で単一行に出力せよ。
入出力例
7 0010011 1111010
1111111
4 1010 1101
1101
注記
サンプルケースでは です。*3は例えば のとき となり最大値をとります。
F. Enchanted Matrix / Заколдованная матрица (3250点)
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
サイズ ( 行 列)の行列 がありますが、 の値しか分かりません。この行列の行は上から下へ から の番号が振られていて、列は左から右へ から の番号が振られています。行 と列 の交点のセルを と表記します。
行列をサイズ の長方形に分解したとき (縦 行、横 列の長方形で、各セルはちょうど1つの長方形に所属する)、全ての長方形が互いに等しいような組 の個数を求めてください。
次のようなクエリを利用することができます。
- : 行列 の縦 行、横 列の重ならない部分矩形が等しいかどうかを調べる。1つ目の部分矩形の左上角は で、2つ目の部分矩形の左上角は である。部分矩形は少なくとも1つの共通セルが存在するとき重なります。クエリ内の部分矩形の座標が不正であったり(例えば行列の境界外にあるとき)、重なっているとき、解答は不正なものとみなされる。
回までクエリを投げることができます。行列 の要素はプログラム開始前に固定されていて、クエリに依存することはありません。
入力
1行目には2つの整数 が与えられる、それぞれ行と列の数である。
出力
答える準備ができたら1行に感嘆符('!
')と答えを出力せよ、答えは適切な組 の数である。その後、プログラムは終了しなければならない。
相互入出力
クエリの作成には""という形式で1行出力せよ、ここでそれぞれの整数は重ならない長方形の高さと幅と左上角の座標であり、これらの長方形が等しいかどうかを調べるものである。
各クエリの後、単一の整数 は か を読み取らなければならない。部分矩形が等しい場合 で、そうでない場合 である。
クエリの形式が間違っている場合や 回よりも多くクエリを尋ねた場合、Wrong Answer
という判定を得る。
クエリの出力後、改行出力、出力バッファのflushを忘れないようにせよ。そうでなければIdleness limit exceeded
となる。出力バッファのflushのためには次を利用せよ。
- C++の場合、
fflush(stdout)
やcout.flush()
- Javaの場合、
System.out.flush()
- Pascalの場合、
flush(output)
- Pythonの場合、
stdout.flush()
- 他の言語の場合は、ドキュメントを参照せよ
行列 は固定されていて、相互入出力のプロセスにおいて変化しないことは保証されている。
ハック形式
ハックを行うには、次のテスト形式に従いなさい。
1行目に2つの整数 を出力せよ、これらはそれぞれ行列の行数と列数である。
つづく 行の各行には 個の整数を出力せよ、これらは行列 の要素である。この行列の要素は全て から までの整数(両端含む)でなければならない。
入出力例
3 4 1 1 1 0
? 1 2 1 1 1 3 ? 1 2 2 1 2 3 ? 1 2 3 1 3 3 ? 1 1 1 1 1 2 ! 2
注記
例のテストではサイズ の行列 は次のようになります。