済ませられるので、間に合いそう。バラバラな区間を同じグループに入れても、共通部分がむやみに短くなって損な気がする。小さい順にソートし、どこかで左右に分ける方法が考えつく。左右から累積Max,Minを取っておくことで取得できる。$L[i]$として、配列アクセスだけで計算できる。最初のグループは必ずその区間の長さ分の得点が得られる。その場合、明らかに最も長い区間を1グループとした方がよい。上記の「左から順」では補足できないので、これを別に計算する。固定されるため、見えやすくなる。ソートして分ける方法と、最も長い区間を単独グループにする方法の2つで、本当に網羅できているのかも理解できる。(どうやってもできない)解法タネが分かれば実装は頻出のMOD計算をするだけ。実験まず、試してみると普通のランダム文字列ならだいたい成功してしまうので、無理な例を考えてみる。なり、すぐに手詰まりになる。半分、というところが怪しそう。なり、失敗は失敗なのだが、結構いいところまでいく。法則探し文字列中のABAB...が連続する箇所を考えると、この部分はどの2文字も一気には削除できず、両端から1文字ずつ削っていくしかない。この“岩盤”を削る作業に必要となる“爆薬”が、'A'なら'A,C'、'B'なら'B,C'であり、削除時に隣接してもらわないといけない。いうわけで、岩盤1文字の削りに爆薬1文字必要なので、1箇所の岩盤を削除するには、その長さと同数の爆薬が最低限必要である。ABA|ABABAのように、AとBを組み替えた岩盤はもう一方にとっての爆薬になり得る。数番目がB」が一致している2つの岩盤は、中間を削るとくっついてしまう。このようにA,Bのindexの偶奇が一致している複数の岩盤は、まとめて大きな1つの岩盤として扱える。それ以外の文字で爆薬が、岩盤の長さと同数必要。爆薬は、indexが奇数番目(Bと組になるもの)ならA以外、偶数番目(Aと組になるもの)ならB以外なら何でもよいので、1箇所につき2通りずつの選択肢がある。(奇数番目がAの岩盤の場合)常にindexの偶奇は不変なので、奇数番目がAの岩盤を考えている間、ある瞬間に岩盤の'A'と隣接して使えるはずだった爆薬の'A'が、操作手順によって岩盤に変化したり、岩盤の'B'と隣接して使えなくなる、ということは無い。個未満の文字しか置き換えていない文字列」は、不可能とわかる。個以上爆薬があれば、どこにあろうと最終的には岩盤に隣接できるので、達成可能である。半数未満しか置き換えないので、ABAB...をベースとしたものと、BABA...をベースとしたものが、重複して数えられることは無い。同じ理由から、爆薬の並びの方が実質的な岩盤となって最後まで残ってしまう、ということも無い。それぞれに対し、以下を掛け合わせたパターンが不可能である。ビビるが、計算は単純なのでPyPyを使えば問題なく通る。ikatakosメディアマネージャー文書の先頭へ。