线上OJ:
洛谷:https://www.luogu.com.cn/problem/P7909 (opens in a new tab)
acwing:https://www.acwing.com/problem/content/description/4089/ (opens in a new tab)
一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid=2074 (opens in a new tab)
核心思想:
- 如果 L 和 R 都在同一个 n 的倍数区间里,则 R%n 为最大值
- 如果 L 和 R 横跨了 n 的不同倍数区间,则说明 L ~ R 之间必定包含某一个数 x, 且 x%n = n-1
举例:input 7 16 23
7个小朋友,L=16, R=23
可以发现,最多拿到的奖励数量为小朋友数量减去1(如果=小朋友数量,就又每人分一颗)。
区间划分:16 ...... 20 | 21 ...... 23 由于L在7的2倍区间,R在7的3倍区间,所以必包含 %7余6的数,即20。
此时直接输出余数 6 即可
若 L 和 R 在同一个区间内(比如 input:7 16 19),则直接输出 R%n 即19%7=5 即可
题解代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, L, R;
cin >> n >> L >> R;
if((L/n) == (R/n)) cout << (R%n);
else cout << n-1;
return 0;
}