Codeforces Round #710 (Div. 3) 問題文和訳
- A. Strange Table / Странная таблица
- B. Partial Replacement / Частичная замена
- C. Double-ended Strings / Двусторонние строки
- D. Epic Transformation / Эпическая трансформация
- E. Restoring the Permutation / Восстановление перестановки
- F. Triangular Paths / Треугольные пути
- G. Maximize the Remaining String / Максимизируй оставшуюся строку
A. Strange Table / Странная таблица
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- セルは1から順に数が振られる
- セルは列ごとに左の列から右の列へと数が振られ、各列内では上から下へ向かって数が振られる
- 各セルの番号は前のセルよりも1大きい整数である
例えば、 の場合、表は次のように数が振られます。
$$
\begin{matrix}
1 & 4 & 7 & 10 & 13 \\
2 & 5 & 8 & 11 & 14 \\
3 & 6 & 9 & 12 & 15 \\
\end{matrix}
$$
しかし、Поликарпはこのような番号付けは不便であると考えています。彼は「行による」番号付けを好みます。
- セルは1から順に数が振られる
- セルは行ごとに上の行から下の列へと数が振られ、各列内では左から右へ向かって数が振られる
- 各セルの番号は前のセルよりも1大きい整数である
例えば、 の場合、Поликарпは次のような表の番号付けを好みます。
$$
\begin{matrix}
1 & 2 & 3 & 4 & 5 \\
6 & 7 & 8 & 9 & 10 \\
11 & 12 & 13 & 14 & 15 \\
\end{matrix}
$$
Поликарпにはあまり時間がないため、「列による」番号付けで であるようなセルの「行による」番号付けでの番号が何になるかを調べるよう頼まれています。
入力
1行目には単一の整数 が与えられる。そののち 個のテストケースが続く。
各テストケースは単一行で構成され、3つの整数 が与えられる、ここで、 は行数と列数であり、 はセルの番号である。
数値が -bit整数型に収まらないテストケースが存在するため、プログラミング言語の -bit以上の整数型を用いる必要があることに注意せよ。
出力
各テストケースについて、「列による」番号付けでのセルの番号を出力せよ。
入出力例
5 1 1 1 2 2 3 3 5 11 100 100 7312 1000000 1000000 1000000000000
1 2 9 1174 1000000000000
B. Partial Replacement / Частичная замена
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
.
'と'*
'から成る 文字の文字列 が与えられます。以下の条件を満たすようにいくつかの'*
'文字を'x
'文字に置換したいと思っています。
- 元の文字列の最初の'
*
'文字は'x
'に置換されてなければならない - 元の文字列の最後の'
*
'文字は'x
'に置換されてなければならない - 置換された隣り合う2つの文字'
x
'間の距離は を超えてはならない(より形式的には、位置 と で置換を行い、位置 に記号'x
'が存在しない場合、 は 以下でなければならない)
例えば、 .**.***
の場合、以下の文字列は上記の条件を満たしています。
.xx.*xx
.x*.x*x
.xx.xxx
しかし、例えば、以下の文字列は条件を満たしません。
.**.*xx
(最初の'*
'文字は'x
'に置換されてなければならない).x*.xx*
(最後の'*
'文字は'x
'に置換されてなければならない).x*.*xx
(位置 と 間の距離は よりも大きい)
が与えられたとき、上記を条件を満たすために'x
'に置換しなければならない'*
'文字の最小数を求めてください。
入力
1行目には単一の整数 が与えられる。そののち 個のテストケースが続く。
各テストケースの1行目には2つの整数 が与えられる。
各テストケースの2行目には文字'.
'と'*
'から成る 文字の文字列 が与えられる。
文字列 には少なくとも1つの'*
'が存在することは保証される。
任意の隣り合う2つの'*
'文字の間の距離が を超えないことは保証される。
出力
各テストケースについて上記を条件を満たすために'x
'に置換しなければならない'*
'文字の最小数を出力せよ。
入出力例
5 7 3 .**.*** 5 1 ..*.. 5 2 *.*.* 3 2 *.* 1 1 *
3 1 3 2 1
C. Double-ended Strings / Двусторонние строки
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- の(文字列 の長さが0より大きい)とき、文字列 の最初の文字を削除する、つまり、 を に置換する
- のとき、文字列 の最後の文字を削除する、つまり、 を に置換する
- の(文字列 の長さが0より大きい)とき、文字列 の最初の文字を削除する、つまり、 を に置換する
- のとき、文字列 の最後の文字を削除する、つまり、 を に置換する
それぞれの操作の後、文字列 または が空になることがあることに注意して下さい。
例えば、 "hello
" "icpc
"の場合、次のような一連の操作を行うことができます。
- 文字列 の最初の文字を削除 "
ello
" "icpc
" - 文字列 の最初の文字を削除 "
ello
" "cpc
" - 文字列 の最初の文字を削除 "
ello
" "pc
" - 文字列 の最後の文字を削除 "
ell
" "pc
" - 文字列 の最後の文字を削除 "
ell
" "p
"
与えられた文字列 について、文字列 を等しくするための最小の操作回数を求めてください。空文字列同士も等しいものとすることに注意して下さい。
入力
1行目には単一の整数 が与えられる。そののち 個のテストケースが続く。
各テストケースの1行目には小文字のラテン文字から成る文字列 が与えられる。
各テストケースの2行目には小文字のラテン文字から成る文字列 が与えられる。
出力
各テストケースについて、文字列 を等しくするための最小の操作回数を出力せよ。
入出力例
5 a a abcd bc hello codeforces hello helo dhjakjsnasjhfksafasd adjsnasjhfksvdafdser
0 2 13 3 20
D. Epic Transformation / Эпическая трансформация
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- 配列内の異なる2数 を選ぶ
- 配列から 番目と 番目の要素を削除する
例えば、 の場合、次のような一連の操作を行うことができます。
- を選び、配列 は になる
- を選び、配列 は になる
配列に一連の操作を施した後の配列のサイズの最小値はどうなるでしょうか?
入力
1行目には単一の整数 が与えられる。そののち 個のテストケースが続く。
各テストケースの1行目には単一の整数 が与えられる、これは配列 の長さである。
各テストケースの2行目には 個の整数 が与えられる。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、配列に一連の操作を施した後の、サイズの可能な最小値を出力せよ。
入出力例
5 6 1 6 1 1 4 4 2 1 2 2 1 1 5 4 5 4 5 4 6 2 3 2 1 3 1
0 0 2 1 0
E. Restoring the Permutation / Восстановление перестановки
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
Поликарпは から までの数の順列 を貰いました。しかし、Поликарпが家に帰ったとき、ポケットの中の順列 が以下のルールに従っ配列 に変わっていることに気が付きました。
ここで、Поликарпは与えられた順列としてあり得る辞書順最小の配列と辞書順最大の配列がどんなものか疑問に思いました。
長さ の配列 が長さ の配列 よりも辞書順で小さいとは配列 と の最初の 個の要素が一致し、配列 の 番目の要素が配列 の 番目の要素より小さい場合です。例えば、配列 は配列 よりも辞書順で小さいです。
例えば、 の場合、 となり、この場合、元の としては次のような順列が考えられます。
- (辞書順最小順列)
- (辞書順最大順列)
与えられた配列 についてПоликарпに最初に渡された可能性のある辞書順最小の順列と辞書的最大の順列を求めて下さい。
入力
1行目には単一の整数 が与えられる。そののち 個のテストケースが続く。
各テストケースの1行目には単一の整数 が与えられる。
各テストケースの2行目には 個の整数 が与えられる。
配列 がある順列 に問題文中のルールを適用して得られたものであることは保証されている。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、2行を出力せよ。
- 1行目に 個の整数を出力せよ、これらはПоликарпに最初に渡された可能性のある辞書順最小の順列である
- 2行目に 個の整数を出力せよ、これらはПоликарпに最初に渡された可能性のある辞書順最大の順列である
入出力例
4 7 3 3 4 4 7 7 7 4 1 2 3 4 7 3 4 5 5 5 7 7 1 1
3 1 4 2 7 5 6 3 2 4 1 7 6 5 1 2 3 4 1 2 3 4 3 4 5 1 2 7 6 3 4 5 2 1 7 6 1 1
F. Triangular Paths / Треугольные пути
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
活性辺のみから成る経路が存在する場合、点 から点 へ行くことができます。例えば、上図で、 から への経路は存在しますが、 から への経路は存在しません。
最初は点 にいます。各ターン次のことが行えます。
- 点 空の辺を取り換える。点 への辺が活性化されていれば、それの代わりに点 への辺が活性化され、そうではなく点 への辺が活性化されていれば、それの代わりに点 への辺が活性化される。この行動は経路のコストを 増加させる
- 活性辺を辿って現在の点から次の点へ移動する。この行動は経路のコストを増加させない
無限三角形上の 点 が与えられます。 から任意の順序で 個の点を全て通過する最小コストの経路を求めてください。
入力
1行目には単一の整数 が与えられる。そののち 個のテストケースが続く。
各テストケースは単一の整数 が与えられる行で始まる、これは訪れる点の個数である。
各テストケースの2行目には 個の整数 が与えられる、ここで は 番目の点が位置する層の番号である。
各テストケースの2行目には 個の整数 が与えられる、ここで は 層目内の 番目の点の番号である。
全ての 点が異なることは保証されている。
全ての 点を横断する方法が常に少なくとも1通り存在することは保証されている。
全てのテストケースでの の和が を超えないことは保証されている。
出力
各テストケースについて、対応するテストケースの全ての点を通過する経路の最小コストを出力せよ。
入出力例
4 3 1 4 2 1 3 1 2 2 4 2 3 2 1 1000000000 1 1000000000 4 3 10 5 8 2 5 2 4
0 1 999999999 2
G. Maximize the Remaining String / Максимизируй оставшуюся строку
テストごとのメモリ制限: 256 MB
入力: 標準入力
出力: 標準出力
- 文字列 の中で位置 の文字が少なくとも2回出現するようなインデックス を選び、位置 の文字を削除する、即ち、 を に置換する
例えば、 "codeforces
"の場合、次のような一連の操作を行うことができます。
- "
codefrces
" - "
odefrces
" - "
odefrcs
"
文字列 が与えられたとき、その文字列のすべての文字がユニーク*2になるような一連の操作を行った後に得られる、辞書順最大の文字列を求めて下さい。
長さ の文字列 が長さ の文字列 よりも辞書順で小さいのは、以下の場合です。
- 文字列 と の最初の 文字が同じで、文字列 の 文字目が文字列 の 文字目よりも小さいようなインデックス が存在する場合
- または文字列 と の最初の 文字が同じで、 である場合
例えば、文字列 "aezakmi
"は文字列 "aezus
"よりも辞書順で小さいです。
入力
1行目には単一の整数 が与えられる。そののち 個のテストケースが続く。
各テストケースは、小文字のラテン文字からなる文字列 によって特徴づけられる。
全てのテストケースでの文字列の長さの和が を超えないことは保証されている。
出力
各テストケースについて、文字列の全ての文字がユニークになるような一連の操作を行った後に得られる、辞書順最大の文字列を出力せよ。
入出力例
6 codeforces aezakmi abacaba convexhull swflldjgpaxs myneeocktxpqjpz
odfrces ezakmi cba convexhul wfldjgpaxs myneocktxqjpz