分糖果

1797: 分糖果(CSP-J 2021 T1)

题目描述

红太阳幼儿园有 nn 个小朋友, 你是其中之一。保证 n2n≥2 。
有一天你在幼儿园的后花园里发现无穷多颗糖果, 你打算拿一些糖果回去分给幼儿园的小朋友们。 由于你只是个平平无奇的幼儿园小朋友, 所以你的体力有限, 至多只能拿 RR 块糖回去。 但是拿的太少不够分的, 所以你至少要拿 LL 块糖回去。保证 nLRn≤L≤R 。 也就是说, 如果你拿了 kk 块糖, 那么你需要保证 LkRL≤k≤R 。
如果你拿了 kk 块糖, 你将把这 kk 块糖放到篮子里, 并要求大家按照如下方案分糖果:只要篮子里有不少于 nn 块糖果,幼儿园的所有 nn 个小朋友(包括你自己)都从篮子中拿走恰好一块糖, 直到篮子里的糖数量少 于 nn 块。此时篮子里剩余的糖果均归你所有一一这些糖果是作为你搬糖果的奖励。
作为幼儿园高质量小朋友, 你希望让作为你搬糖果的奖励的糖果数量(而不是你最后获得的总糖果数 量!)尽可能多; 因此你需要写一个程序, 依次输入 n,L,Rn,L,R, 并输出你最多能获得多少作为你搬糖果的奖 励的糖果数量。

输入

输入一行, 包含三个正整数 $n, L, R$, 分别表示小朋友的个数、糖果数量的下界和上界。

输出

输出一行一个整数,表示你最多能获得的作为你搬糖果的奖励的糖果数量。

样例输入 复制

7 16 23

样例输出 复制

  6


分析:
题目没什么好说的就让自己的糖果最大就行了
我们这里不讲暴力,会tle
其实很简单但是要搞懂理念
先用ans来记录一下r-(l/n*n)
(/n*n有用,毕竟是整除)
让后再判断一下ans>还是<n
>直接n-1(%的性质,不细说)
<直接ans
代码:
#include<bits/stdc++.h>
using namespace std;
int n,l,r,ans;
int main() {
    cin>>n>>l>>r;
    ans=r-(l/n*n);
    if(ans>=n) {
        cout<<n-1;
    } else {
        cout<<ans;
    }
    return 0;
}

easy~

 
posted @ 2022-05-27 20:26  陈瑞淞  阅读(305)  评论(0)    收藏  举报