mini notes

競技プログラミングの解法メモを残していきます。

yukicoder No.1048 Zero (Advanced) (★2)

問題:No.1048 Zero (Advanced) - yukicoder

解答①:#491132 (C++14) No.1048 Zero (Advanced) - yukicoder
解答②:#491139 (C++14) No.1048 Zero (Advanced) - yukicoder

解法:[l * k, r * k] の区間にMの倍数が含まれているかどうかを確認すればよい。
これは、端点がMの倍数であればOK、そうでない場合l * k % M + (r * k - l * k) ≧ M であればOK、そうでなければNOである。
解答①は毎回MOD M したが、そうしない方が見やすかった。

ちなみに、[l * k, r * k] の区間にMの倍数が含まれている ⇔ floor((l * k - 1) / M) ≠ floor(r * k / m) である。(解答②)