天天看點

分糖果(candy)

【題目描述】

紅太陽幼稚園的小朋友們開始分糖果啦!

紅太陽幼稚園有 nn 個小朋友,你是其中之一。保證 n≥2n≥2。

有一天你在幼稚園的後花園裡發現無窮多顆糖果,你打算拿一些糖果回去分給幼稚園的小朋友們。

由于你隻是個平平無奇的幼稚園小朋友,是以你的體力有限,至多隻能拿 RR 塊糖回去。

但是拿的太少不夠分的,是以你至少要拿 LL 塊糖回去。保證 n≤L≤Rn≤L≤R。

也就是說,如果你拿了 kk 塊糖,那麼你需要保證 L≤k≤RL≤k≤R。

如果你拿了 kk 塊糖,你将把這 kk 塊糖放到籃子裡,并要求大家按照如下方案分糖果:隻要籃子裡有不少于nn 塊糖果,幼稚園的所有 nn 個小朋友(包括你自己)都從籃子中拿走恰好一塊糖,直到籃子裡的糖數量少于

nn 塊。此時籃子裡剩餘的糖果均歸你所有——這些糖果是作為你 搬糖果的獎勵。

作為幼稚園高品質小朋友,你希望讓作為你搬糖果的獎勵的糖果數量(而不是你最後獲得的總糖果數量!)盡可能多;是以你需要寫一個程式,依次輸入 nn, LL, RR,并輸出

出你最多能獲得多少作為你搬糖果的獎勵的糖果數量。

【輸入】

輸入一行,包含三個正整數 nn, LL, RR,分别表示小朋友的個數、糖果數量的下界和上界。

【輸出】

輸出一行一個整數,表示你最多能獲得的作為你搬糖果的獎勵的糖果數量。

【輸入樣例】

7 16 23

【輸出樣例】

6

【提示】

【樣例 1 解釋】

拿 k=20k=20 塊糖放入籃子裡。

籃子裡現在糖果數 20≥n=720≥n=7,是以所有小朋友獲得一塊糖;

籃子裡現在糖果數變成 13≥n=713≥n=7,是以所有小朋友獲得一塊糖;

籃子裡現在糖果數變成 6<n=76<n=7,是以這 66 塊糖是作為你搬糖果的獎勵。

容易發現,你獲得的作為你搬糖果的獎勵的糖果數量不可能超過 66 塊(不然,籃子裡的糖果數量最後仍然不少于 nn,需要繼續每個小朋友拿一塊),是以答案是 66。

【樣例 2 輸入】

10 14 18

【樣例 2 輸出】

8

【樣例 2 解釋】

容易發現,當你拿的糖數量 kk 滿足 14=L≤k≤R=1814=L≤k≤R=18 時,所有小朋友獲得一塊糖後,剩下的 k−10k−10 塊糖總是作為你搬糖果的獎勵的糖果數量,是以拿 k=18k=18 塊是最優解,答案是 88。

【資料範圍】

測試點 n ≤ R ≤ R − L ≤

1 2 5 5

2 5 10 10

3 103 103 103

4 105 105 105

5 103 109 0

6 103

7 105 105

8 109 109

9

10

對于所有資料,保證 2≤n≤L≤R≤1092≤n≤L≤R≤109。本題目評測預設開啟-O2。

#include<bits/stdc++.h>
using namespace std;
long long n,l,r,t;
int main()
{
	cin>>n>>l>>r;
	t=l%n+r-l;
	if(t>=n-1)cout<<n-1;
	else cout<<t;
	return 0;
}
           

繼續閱讀