G - Another Mod of Linear Problem 解説 by tatyam


AtCoder Library の floor_sum を使用します。

\(X_k \le k\) を満たす \(k\) の個数を数えることにします。

整数列 \(Y = (Y_0, Y_1, \dots, Y_{N-1})\)\(\displaystyle Y_k = \left\lfloor\frac{Ak + B}{M}\right\rfloor\) で定義します。floor_sum によって \(\text{sum}(Y)\) を取得することができます。

さて、\(X_k \le k\) を満たすことは、\(\dfrac{Ak + B}{M}\) の分子から \(k + 1\) を引いたときに整数部分が変化することと同値です。

整数列 \(Y' = (Y'_0, Y'_1, \dots, Y'_{N-1})\)\(\displaystyle Y'_k = \left\lfloor\frac{Ak + B - (k + 1)}{M}\right\rfloor\) で定義します。floor_sum によって \(\text{sum}(Y')\) を取得することができます。

以上より、\(\text{sum}(Y) - \text{sum}(Y')\)\(X_k \le k\) を満たす \(k\) の個数と一致します。

投稿日時:
最終更新: