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

 

posted @ 2021-11-03 23:03  yfmd  阅读(403)  评论(0编辑  收藏  举报