ABC334-B 解説
B - Christmas Trees
$L \le A+kM \le R$ を満たす整数 $k$ の個数を求める問題です。制約が大きいため、全探索では求められません。
これは $L-A \le kM \le R-A$ と言い換えられるので、$L-A$ 以上 $R-A$ 以下の $ M $ の倍数です。$L-A$ と $R-A$ の正負で分けると解くことができます。
A, M, L, R = map(int, input().split()) L -= A R -= A if L <= 0: if R < 0: print(-L // M - (-R - 1) // M) else: print(R // M + -L // M + 1) else: print(R // M - (L - 1) // M)
#include <bits/stdc++.h> using namespace std; int main() { long long A, M, L, R; cin >> A >> M >> L >> R; L -= A; R -= A; if (L <= 0) { if (R < 0) { cout << -L / M - (-R - 1) / M << '\n'; } else { cout << R / M + -L / M + 1 << '\n'; } } else { cout << R / M - (L - 1) / M << '\n'; } }
また、以下のように簡単に書くこともできます。(ぜひ考えてみてください。)
A, M, L, R = map(int, input().split()) print((R - A) // M - (L - A - 1) // M)