[CSP-J 2021] 分糖果
在经历了提高组的毒打后来普及组闲逛,第一题就让我感到了世界的黑暗 qwq
题目描述:L到R之间选一个数,模n后取最大
首先第一个显然:answer一定在0到n-1之间。
我们当然是优先想到n-1能取就取,那就是R>=2n的时候喽,这时直接输出就可以了。
但有一个L的限制,之前的想法自然作废。然后我们可以发现答案是与n分成的一个个小块有关的
于是我们可以把所有数分成1到n,n+1到2n,2n+1到3n......(k-1)n+1到kn等k个区间
然后可以发现
1.若L和R在一个区间内,L对答案的限制就没了
2.若L和R不在一个区间内,答案n-1是一定可以取到的。为什么?因为L到R之间肯定有某一区间倒数第二个数
所以,附代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 namespace _xzy 4 { 5 typedef long long ll; 6 inline int read() 7 { 8 ll sm=0,flag=1; 9 char ch=getchar(); 10 while(ch<'0'||ch>'9'){if(ch=='-')flag=-1;ch=getchar();} 11 while(ch>='0'&&ch<='9'){sm=sm*10+ch-'0';ch=getchar();} 12 return sm*flag; 13 } 14 ll n,l,r; 15 void My_main() 16 { 17 n=read();l=read();r=read(); 18 if(r/n==l/n)cout<<r%n; 19 else cout<<n-1; 20 } 21 } 22 int main() 23 { 24 _xzy::My_main(); 25 return 0; 26 }