【题解】 [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;
}
posted @ 2024-07-15 18:10  T_泓  阅读(33)  评论(0编辑  收藏  举报