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;
}

拖了好久才写题解,咕咕咕

posted @ 2022-03-05 13:37  AC?别闹!  阅读(119)  评论(0编辑  收藏  举报