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