2020年8月17日月曜日

CodeChef August Challenge 2020 - Smallest KMP

最適な文字列がどういう形になっているか考えると、パターンの前後はa...ab...b ...a...ab...b \ ...... y...yz...z... \ y...yz...zのようになっているはずなので、SSからPPを除いた上でソートしたものをSS'とし、PPSS'のどこに挿入するのが最善か調べる。PPSS'ii文字目に挿入したものとSS'i+1i+1文字目に挿入したものを比較するとき、この比較は辞書順に関して下に凸になっているので、最小となる場所を二分探索で探せばよい。