我们先来看一下题目:
这个题典型的逻辑题目,你看数据范围,一循环只能拿90分,要想拿100分,就要逻辑推理。
分析:为了使奖励尽可能多,理想情况就是使得分完之后的剩余糖果数是n-1,因此需要判断能否达到这个理想情况——当区间[L, R]能够完整覆盖一个长度为n的范围,说明一定存在一个数字k,使得k%n=n-1,因此只需要判断L/n是否与R/n一致;如果不能达到这个理想情况,则拿的越多越好,即答案为可以拿到的糖果上限R%n。
所以看一下代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, L, R; cin>>n>>L>>R;
if(L/n < R/n) cout<<n-1; //看[l,r]有没有一个完整的n,有则一定能拿到n-1个
else cout<<R%n; //否则尽可能多拿
return 0;
}