♐ CSP_J 组真题
2021年
1. 分糖果

线上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)

核心思想:

  1. 如果 L 和 R 都在同一个 n 的倍数区间里,则 R%n 为最大值
  2. 如果 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;
}