2021年度训练联盟热身训练赛第五场 I.Jam-packed
作者:互联网
题目链接:Jam-packed
- 题意:给出n瓶果酱,每一个箱子最多可装m瓶,问装完所有的果酱后,最少果酱的箱子中最多可以有几瓶。
- 题目来源:这题在比赛的时候队友是根据数学来推出一个函数,然后通过函数性质求出最值的,然后比较难想到,我就看了一下其他大佬解法,发现可以用二分解,所以就记录一下。
- 解析:利用二分的思想,假设每箱都装mid瓶(题目没有规定箱子数量)一共装了y = n / mid箱,若剩下的果酱 = (n % mid)(最后一箱可能正好mid瓶,可能小于mid瓶)能装入这y箱所剩余的位置((m - mid) * y),那么说明符合要求,先记录下mid值,若不能装下,说明每箱的最小值取大了,这时右区间必须缩小。
- 代码:
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
ll n, m;
cin >> n >> m;
ll l = 1, r = m;
while(l < r)
{
ll mid = (l + r + 1) / 2;
if(n % mid <= (n / mid) * (m - mid)) l = mid;
else r = mid - 1;
}
cout << r << endl;
return 0;
}
标签:题目,果酱,第五场,ll,mid,Jam,训练赛,packed 来源: https://www.cnblogs.com/K2MnO4/p/14654944.html