ツバサの備忘録

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

AGC024 B - Colorful Slimes

問題
提出コード

解法

スライムを好きなタイミングで捕まえることができ、捕まえる、魔法を唱える、捕まえる魔法を唱える…といったような順番で操作を行うことができます。ので、魔法を唱えるを唱える回数kをまずは固定してしまって、捕まえるスライムの種類を決めてから、最後にk×xを追加します。
これをkについて全探索して最小値を求めることで答えを求めていきます。
k回魔法を唱えることにすると、0~k回のうち好きな回数変色ができます。
ということで、魔法を唱える回数が決まってしまっているので、i番目のスライムを入手したいとき、i-kiのスライムのうち一番入手時間が短いものを選んでくると、i番目のスライムを入手するために必要な時間を最小にすることができます。
区間についての最小値を求めたいので、RMQを使ってごり押しをします。
i-kが負になる場合を考慮するために、RMQは要素数2×Nにし、a_1a_Nを2つ並べます。すると、i+k-nは負になることがない(魔法を唱える回数がNより大きくなったときに答えとなることは絶対にありません)ので、配列外を参照することはなくなります。
ということで、あとは全てのiについて、区間[i-k,i+1)の最小値をRMQで求めて加算していき、最後にk×xを追加すればk回魔法を唱える場合の最小値になります。
これをkについて全探索することで、答えが求まります。