1600*C. Hamburgers(二分&贪心)

该文章描述了解决Codeforces问题371C的方法,使用二分查找算法确定在给定材料和金钱限制下,可以制作的最大蛋糕数量,同时处理可能的longlong乘积溢出问题。

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

Problem - 371C - Codeforces

 解析:

        二分答案,每次check当前能做的蛋糕数量,判断剩余材料和金钱能否做出来。

        注意check中的乘积可能会爆long long,所以二分右边界需要设置1e14以内(因为可能会乘一个10000)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,c;
int x,y,z;
int p,q,t;
int rr;
string s;
bool check(int mid){
	int sum=rr;
	if(x<mid*a){
		if(p*(mid*a-x)<=sum) sum-=p*(mid*a-x);
		else return false;
	}
	if(y<mid*b){
		if(q*(mid*b-y)<=sum) sum-=q*(mid*b-y);
		else return false;
	}
	if(z<mid*c){
		if(t*(mid*c-z)<=sum) sum-=t*(mid*c-z);
		else return false;
	}
	return true;
}
signed main(){
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='B') a++;
		else if(s[i]=='S') b++;
		else c++;
	}
	cin>>x>>y>>z;
	cin>>p>>q>>t;
	cin>>rr;
	int l=0,r=1e14;
	while(l<r){
		int mid=l+r+1>>1;
		if(check(mid)) l=mid;
		else r=mid-1;
	}
	cout<<l;
	return 0;
} 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值