极简题解
2025-07-27 09:01:47
发布于:上海
25阅读
0回复
0点赞
题目大意
至少拿L,至多拿R(n≤L≤R),没人依次从篮子里拿一块,最终不够n块时全归你所有,使你获得的糖果最多
思路分析
拿回来 x (L≤x≤R),每人拿一块,拿到不足n块,则剩下的是 y = x % n。
如果 L 到 R 范围内有一个数 % n == n - 1,则是拿的最多的(再加一块又能分一轮,再减一块就不是最优)
所以只要找存不存在这个数,如果存在输出 n - 1,不存在输出最优(即最接近剩下n - 1块)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,l,r;
int main(){
cin >> n >> l >> r;
if(l + n - 1 - l % n <= r) cout << n - 1;
//求大于l且距离l最近的 % n == n - 1
//先求出l % n的结果,即拿最小值时剩下的糖果,n - 1即为拿到最多的糖果时剩下的最多的块数
//两者相减,再加上l,就是l到距离他最近的剩下n - 1块的糖果的实际拿的数量
//如果这个数在 <= r 的区间内,证明它可以拿这么多糖,输出最多的 n - 1
//如果不在,那r就是离剩下n - 1块最近的结果,输出r % n块
else cout << r % n;
return 0;
}
这里空空如也
有帮助,赞一个