解法
「全ての列についてのに一致する連続する部分列の個数の総和」から「カラフルでない列についての
に一致する連続する部分列の個数の総和」を引く方針で考えます。前者は簡単なので省略します。後者は
がカラフルな場合は
なので、以下カラフルでないものとします。
まず次のDPを考えます。
ある特定の長さ
のdistinctな列の後に、
個の要素を繋げてできるカラフルな列の個数
次が成り立ちます。
ただし、このDPを初期化するには、が分かっていないといけません。そこで、
ある特定の
項の後に、
個の要素を繋げてできるカラフルな列であって、distinctなsuffixの最大長さが
であるものの数
というものを考えれば、
と遷移が定義できることがわかります。です。これらのDPはいずれも累積和で高速化できます。
さて、以上を使って「カラフルでない列についてのに一致する連続する部分列の個数の総和」を求めていきましょう。
がdistinctな場合。数列中に長さ
のdistinctな列が登場する場合の数は、終了位置を
と固定すれば、
です。その中に、
はちょうど
の割合で存在します。あとは
を
から
まで動かして総和をとればよいです。
がdistinctでない場合。
のdistinctなprefixの最大長さを
、suffixの最大長さを
とすると、数列中に
が登場する場合の数は、開始位置を
と固定すれば、
になります。あとは
を
から
まで動かして総和をとればよいです。
計算量は全体でになります。
反省
5日かかりました。難しかった。
コンテスト中のACが少ない問題はなかなか解けなくても自己嫌悪に陥らないので良いです。(にしても5日はかかりすぎか)
の遷移を立てるまでにかなりの苦労がありました。しかも蓋を開けてみたら非想定解でした。想定解の方が数倍賢い。