公式

I - Penguin Flicker 解説 by hirayuu_At


ペンギンのいる場所について、もともと長さ1だったものを、ペンギンごと圧縮して長さ0の点とみなします。

1番目のペンギンの左の区間、1番目と2番目の間の区間…、の寄与は \(N\) と長さにのみ依存しますから、この寄与を前計算しておきます。

これは素直に \(O(N^2)\) 個のDPテーブルを用意すればいい…、と思いきや、遷移が循環します。これをうまく解消しましょう。

連立方程式を立てます。すると、各要素はそれ自身と隣の要素のみに依存して決まります。そのため、掃き出し法の反復を \(2\) 回やるだけでよく、全体を \(O(N^2)\) で計算できます。

これでゼロ除算が起こらないことは明らかではないですが、実際に試してみると起こらないので大丈夫です。

そういえば長さを縮めていたのでした。これによって端が怪しくなるのですが、左に何匹のペンギンが落ちるかを固定すれば誤差を計算できるのでfixできます。

実行制限時間に余裕はないかも。DPテーブルの左半分だけ計算するか、係数を適切にして除算をできる限り除くとかするとよいです。

投稿日時:
最終更新: