【题解】 [CSP-J 2021 T1] 分糖果
题目描述
题目大意
给定正整数 \(n\)、\(L\)、\(R\),求 \(\max_{i \in \left [ L, R \right ] } {i \bmod n}\)。
思路
题目主要考察:分类讨论。
众所周知,对于 \(\forall x\),有 $(x \bmod n) \in \left [ 0, n - 1 \right ] $。
那么可以分为两种情况讨论:
- 如果 \(\left \lfloor \frac{L}{n} \right \rfloor = \left \lfloor \frac{R}{n} \right \rfloor\),那么区间 $\left [ L, R \right ] $ 中从小到大的所有数模 \(n\) 的值是非严格单调递增的。所以 \(R \bmod n\) 即为所求。
- 否则,如果 \(\left \lfloor \frac{L}{n} \right \rfloor < \left \lfloor \frac{R}{n} \right \rfloor\),那么在区间 $\left [ L, R \right ] $ 中一定有 \(n\) 的倍数,令该数记作 \(N\)。显而易见,当 \(i = N - 1\) 时 \(i \bmod n\) 的值最大,为 \(n - 1\)。所以 \(n - 1\) 即为所求。
代码
#include <bits/stdc++.h>
using namespace std;
int n, L, R;
int main()
{
scanf("%d%d%d", &n, &L, &R);
if (L / n == R / n) // 第一种情况
printf("%d\n", R % n); // R % n 即为所求
else // 第二种情况
printf("%d\n", n - 1); // n - 1 即为所求
return 0;
}