2020年5月11日月曜日

CodeChef May Challenge 2020 - Chef and Bitwise Product

いったんLLRRを無視して考えると、XXYYの少なくとも一方が立っているビットはZZも1にしたほうがよいし、そうでないビットは0にするべきである。

LLRRを導入する場合にもこの考え方が使える。桁DPのように「LLにはりついている」フラグと「RRにはりついている」フラグを持ちながら、上位の桁からZZを全探索することを考える。両フラグがオフになった枝は残りをどう選んでもLLより大きくRRより小さいことが確定するので、残りの桁は上の考え方によって一通りに決めることができる。探索する枝は桁数に対して高々線形になる。