CSP-J 2021 T1 分糖果(洛谷P7909
CSP-J 2021 T1 分糖果
本来还想打模拟,一看数据范围 \(2\le n \le L \le R \le 10^9\) ,瞬间就不敢打模拟了,但是考场上没推出来结论(我太弱了),打了个模拟就交上了,只有\(70pts\)。
这个题要求的是\(l\)到\(r\)之间\(\mod n\)的值最大的一个数,很明显在没有\(l\)和\(r\)的限制时\(\mod n\)最大的值是\(n-1\),那我们就优先看\(l\)到\(r\)的范围内有没有\(\mod n=n-1\)的数。记\(L=\lfloor\dfrac{l}{n}\rfloor, R=\lfloor\dfrac{r}{n}\rfloor\),如果\(L=R\),那么在\(l\)和\(r\)的范围内\(\mod n\)的值必定是单调递增的,那么要最大的话肯定是选\(r\);如果\(L<R\)的话,那么范围内必定有一个\(n\)的倍数,那自然\(n-1\)是最大的。
代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,l,r;
int main(){
cin>>n>>l>>r;
//如果L=R的情况
if(l/n==r/n) cout<<r%n;
else cout<<n-1;
return 0;
}
拖了好久才写题解,咕咕咕