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;
} 
                









![博华网龙设备命令执行漏洞复现 [附POC]](https://img-blog.csdnimg.cn/69540ab6a8594d1b9506775af030d445.png)








