Official
A - No Majority Editorial by maroonrk_admin
文字列 \(x\) が与えられたときに条件を満たすかどうか判定する方法を考えます.
もし,長さ \(4\) 以上の部分文字列であって,過半数を占める文字が存在するものがあったとします. すると,その部分文字列を半分に切って二つに分けると,どちらかの部分文字列は,過半数を占める文字が存在する長さ \(2\) 以上の部分文字列になります.
よって,判定の際には長さ \(3\) 以下の部分文字列だけをチェックすればいいです. これは,同じ文字が距離\(1\) か \(2\) の位置にない,という条件と同値です.
ここまでわかれば DP が計算できます. \(dp[i][x][y]=i\) 文字目までが決定していて,\(i-1\) 文字目が文字 \(x\),\(i\) 文字目が文字 \(y\) であるような置き換え方の数,とすればよいです.
文字の種類数を \(K\) とすれば,計算量は \(O(NK^3)\) になります.
posted:
last update: