C. Hamburgers(二分答案)

该文介绍了一种使用二分算法解决Hamburgers问题的方法。通过对答案进行二分搜索,计算在限制条件下购买汉堡、薯条和可乐的最小花费,检查花费是否在给定预算内。提供了一个C++代码示例来演示如何实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C. Hamburgers(二分答案)

一、问题

在这里插入图片描述

二、分析

这道题的关键其实就是要想到二分算法,我们对答案进行二分处理。二分钟的check函数即算出我们需要花费多少钱,然后看我们的钱是否够即可。

三、代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll b, s, c;
ll nb, ns, nc;
ll pb, ps, pc;
ll rub;

bool check(ll mid)
{
	ll ab = 0, as = 0, ac = 0;
	ab = max(mid * b - nb, (ll)0);
	as = max(mid * s - ns, (ll)0);
	ac = max(mid * c - nc, (ll)0);
	ll sum = ab * pb + as * ps + ac * pc;
	//cout << mid << " " << ab << " " << as << " " << ac << endl;
	//cout << sum << endl;
	return sum <= rub;
}

void solve()
{
	string str;
	cin >> str;
	for(int i = 0; i < str.size(); i ++ )
	{
		if(str[i] == 'B')
			b ++;
		else if(str[i] == 'S')
			s ++;
		else
			c ++;
	}


	cin >> nb >> ns >> nc;
	cin >> pb >> ps >> pc;
	cin >> rub;
	ll l = 0, r = 1e15 + 10;
	while(l < r)
	{
		ll mid = l + r + 1 >> 1;
		if(check(mid))l = mid;
		else r = mid - 1;
	}
	cout << l << endl;

}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	solve();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值