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