- 题解
CSPJ202101. 分糖果
- 2025-4-7 19:20:46 @
分糖果
贴 :mod(取余运算 等于c++中的%)
1.
要解决这个问题,我们要在范围 [L, R] 内,选择一个糖果数量 k ,使得经过分配后的糖果数量尽量(即奖励)最大,分配的规则是:只要篮子里的糖果不少于 n 块,每个小朋友(包括自己)拿一块糖,剩余糖果即为奖励。 *备:每次需要拿完一整轮
问题分析:
奖励糖果的数量等于 k mod n(因为每次分配 n 块糖,直到剩余不足 n 块)。
我们需要在区间 [L, R] 中找到最大的 k mod n 的值。
要点:
可能存在最大的 k mod n 的值是 n - 1。如果区间 [L, R] 中可以存在多个 k ,则满足了 k mod n = n-1,那么这个值就是最大的奖励。
如果区间中没有这样的 k,那么最大的奖励是 R mod n,因为 R 是区间中最大的数,其模 n 的值也是最大的值。
接下来上解!!
错误代码:(90分,TLE)
#include<bits/stdc++.h>
using namespace std;
int n,l,r,x;
int main(){
cin>>n>>l>>r;
for(int i=l;i<=r;i++) x=max(x,i%n);
cout<<x;
return 0;
}
正确代码:
#include <iostream>
using namespace std;
int n,L,R,k;
int main(){
cin>>n>>L>>R;
if(R/n>L/n) k=n-1;
else k=R%n;
cout<<k;
return 0;
}
极限压行代码(106 Bytes)
#include <iostream>
int n,L,R,k;int main(){std::cin>>n>>L>>R;if(R/n>L/n) k=n-1;else k=R%n;std::cout<<k;}
感谢观看
1 条评论
-
(未来の鳩(お互い))国贸单滢睿 LV 9 (37/37) @ 2025-4-7 19:24:24
主要是这题简单 不喜勿喷
- 1