Music. Technology. Pixels. A cup of tea 
区間を覆う問題は何度か解いたので記憶していた.図を描けばわかりやすい. 解答例
選ぶ連続した整数を区間と見る.例えばのとき,
ooo.....
のようになり,'.'の数だけ区間を右にずらせる.'.'の数はであるから,答えは初期位置も含めて.
各色について買う箱の個数を決め打ちすることを考える:例えば赤ならそれぞれ個以上個以下[1](も同様).これだとであり間に合わないが,2種類だけ決めれば残りに必要な箱の個数は求まる:箱の個数をそれぞれとおくと.これが割り切れかつ先の範囲内でなければならない.この方針ならであるから間に合う.
ところでeditorialがそうしているようにの上限はでも,の上限のでもよい(どうせが負になるため).
コーナーケースに引っ掛かっていると思って色々試行錯誤した挙句元々の解法が間違っていた. 解答例
まず各文字列の中のABの個数を数える.次に末尾にAや,先頭にBがあるものを組み合わせてABが作れることに注意する(文字列の中のABとは重ならないので安心).両方を兼ね備える文字列に注意:パターンBAとおく.そうでなく末尾にA,先頭にBがあるものをそれぞれパターンXA, BXとおく.これらの組み合わせ方を考えたい(どちらでもないパターンはどう組み合わせても意味が無いので以下無視する).
はじめばXAとBX,およびBAをそれぞれ独立に組み合わせた後で合体させればよいと考えていたが,誤りである:例えばBA=3,XA=2,BX=2のとき,XABX+XABX+BABABAとなって5個であるが,最適なのはXABX+XA+BABABA+BXの6個である.このようにBA...BAの先頭および末尾にあるB,Aを活用してそこにXA, BXを組み合わせたほうが得をする.
以上より:
BAがあるとき:
BA...BAの中にABは個XA, BXを追加できる
XA, BXのそれぞれについて,それが1個以上あればABが1個増える(XA, BXも1個減る).これらは破壊的に更新されたとする.XA, BX同士を組み合わせてXABX...XABXを作る:ABは個BAがないとき:
XA, BXの組み合わせのみ.従って文字列の中の特定文字列の個数を数える関数が見当たらなかったので適当な実装をした.最初はStr.split結果のlengthから1引いたものとしていたが,JavaScriptなどと異なりこれは特定文字列が先頭や末尾にある場合に空文字列が入らないためズレてしまう[2].そこで単純にループによる数え上げで実装した.あるいは検索対象の先頭に適当な文字(例えば本問では小文字は出ない)を入れたり,JavaScript版を再現したりすれば大丈夫.
感触は300点,数学要素も考慮すると簡単目な400点問題な気がする. 解答例
500点問題ということで最初数分は難しく考えすぎてしまったが,素直にと表示すればよい:,.これらが等しくなるようなを求めたい:.よっての約数が分かればの候補が得られる.あとは元々の条件を確かめればよい(除算にならないように注意).