Codeforces 371C Hamburgers(二分基础题)
题目大意:给你一个字符串表示一个汉堡的结构,一个汉堡由BSC三个字母组成,然后给你你有的BSC原料的数目,和如果要购买BSC的价格。告诉你你所拥有的金钱,问最多能做出几个汉堡。
思路:很明显这符合单调性,可以直接二分出能做几个汉堡,check也很好写,基本是个二分模板题。
AC程序:
//库省略
using namespace std;
int b,s,c;
ll nb,ns,nc;
int cb,cs,cc;
string ss;
ll mon;
bool check(ll num)
{
ll bb=(num*b-nb)*cb,ss=(num*s-ns)*cs,ccc=(num*c-nc)*cc;
if(bb<0)
bb=0;
if(ss<0)
ss=0;
if(ccc<0)
ccc=0;
if (bb+ss+ccc<=mon)
return 1;
return 0;
}
int main()
{
cin>>ss;
for(int i=0;i<ss.size();i++)
{
if(ss[i]=='B')
b++;
else
if(ss[i]=='S')
s++;
else
c++;
}
cin>>nb>>ns>>nc;
cin>>cb>>cs>>cc;
cin>>mon;
ll l=0,r=1e14,mid;
while(l<r)
{
mid=(l+r)/2;
if(check(mid))
l=mid+1;
else
r=mid;
}
cout<<l-1<<endl;
return 0;
}