ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC004 C - 入れ替え,D - マーブル

C - 入れ替え

提出コード
これは実験をある程度すると法則性が見えてきます。
重要なのはNを5で割った数と、そのあまりです。
この操作は5回で1セットになっていて、1セット完全に行うことで、当時先頭にいた数字が一番後ろまで移動します。
このセットが完了したとき、数字の順番は変わらず、後ろにいくごとに1増えています(6の次は例外的に1です)。あとは、Nを5で割った余りの回数だけ、先頭の数字を後ろにずらせば完了です。

D - マーブル

提出コード
まず、基本的には左右に均等に動かしていくのが一番効率がいいです。部分点解法はこのように配置してマーブルが重なることがないので、O(1)で求めることができます。
手数の計算には累積和を使うとすばやく求められます。
満点解法については、R,G,Bそれぞれの色について、隙間をあけつつ配置することが最適解にはならないので、R,G,Bの右端をきめうち、そのときの手数を求めていきます。これをある程度の幅で全探索してあげれば答えがもとまります。
...と言うだけなら簡単なのですが、配列の添え字の部分でかなりバグりやすいです。
1つ1つ書き出して、サンプルケースの小さいもの等でチェックしつつ実装をするといいと思います。