コンテスト時間: 2025-08-30(土) 21:00 ~ 2025-08-30(土) 22:40 (100分)
A - Misdelivery
Difficulty: 14 / NoviSteps: ???
解答時間: 1:33
個の部屋があり、各
号室には
さんが1人で住んでいる。
号室の
さん宛に荷物を届けたいので、宛先が正しいかどうかを判定せよ。
であるかを判定してやればよい。
B - Fibonacci Reversed
Difficulty: 55 / NoviSteps: ???
解答時間: 8:01
- 正整数
に対し、
を以下のように定義する。
を十進表記して得られる文字列を
、
を反転して得られる文字列を
とおくとき、
の値は、
を整数の十進表記としてみなすことで得られる整数である。
- 正整数
が与えられる。正整数列
を以下のように定義するとき、
の値を求めよ。
をどのように実装するかがポイント。C++ では以下のように実現できる。
- まず
を
to_stringで文字列に変換し、reverseで反転。 - その後、
stollでlong long型として返す。
- まず
long long型を使わないと、サンプルケース3のような場合にオーバーフローする(1敗)。
C - Alternated
Difficulty: 378 / NoviSteps: ???
解答時間: 17:00 + WA x1
- 長さ [tex 2N] の文字列
が与えられる。
は
A,Bを個ずつ含む。
に対して隣り合う文字を入れ替える操作を0回以上行って、同じ文字が隣り合う箇所がない状態にするために、必要な操作回数の最小値を求めよ。
- 重要な考察として、最終的な文字列
の状態は
ABAB ... ABかBABA ... BAの2パターンしかない。 - したがって、
の先頭から
番目にあった
Aは、でも先頭から
番目の位置にあるはずである。
- こうするための最小操作回数は
ABAB ... ABなら、
BABA ... BAならで求められるので、これらの小さい方を答えとすればよい。
- ...と思っていたんだが、なぜかこれだと WA 。なんかバグらせてた...?
- 本番中は、
Bの方の操作回数も計算してその平均を取ることにしたらなんか通った。謎。
D - RLE Moving
Difficulty: 1321 / NoviSteps: ???
解答時間: 57:22
- 無限に広いグリッドがあり、最初、高橋君はマス
に、青木君はマス
にいる。二人はそれぞれ
U,D,L,Rからなる長さの文字列
に従って
回移動をそれぞれ同時に行う。
回の移動の中で、移動直後に高橋君と青木君が同じマスにいた回数を求めよ。ただし、
はランレングス圧縮された形で与えられる。
- 二人の位置の相対座標を管理することにする。この座標が
であるとき、二人は同じマスにいることになる。
- 移動はランレングス圧縮された形で指示されるので、二人の連続部分が重なっている間は、相対座標の変化量も一定になる。
- この間に相対座標が
になるかどうかを、連立方程式を解いて判定することができる。
- ただし、変化量に
の成分が含まれている場合はその都度場合分けが必要なので、かなり実装が重い。
結果
Performance: 1356
1129 → 1154 (+25) Highest更新!
D問題が解かれていなすぎて、かなり Performance が上に引っ張られてた。