Codeforces Hamburgers(二分查找)

Codeforces Hamburgers(二分查找)_第1张图片
题目大意:
做一个汉堡需要b,s,c三种材料,一开始每种材料有nb,ns,nc个,且它们的单件价格分别为pb,ps,pc,有r块钱,根据配方,问最多能做多少个汉堡

解题思路:
考虑用二分查找,注意边界条件,最后所用的钱数可以不是刚刚好为r

代码:

#include 
#define ll long long
using namespace std;
ll rn,ans;
int b,s,c,nb,ns,nc,pb,ps,pc;
int main()
{
    string temp;
    cin>>temp;
    for(auto v:temp)
    {
        if(v=='B') b++;
        else if(v=='S') s++;
        else c++;
    }
    cin>>nb>>ns>>nc;
    cin>>pb>>ps>>pc;
    cin>>rn;
    ll l=0,r=0x3f3f3f3f3f3f;
    while(l<=r)
    {
        ll mid=(l+r)/2;
        ll n1=mid*b-nb,n2=mid*s-ns,n3=mid*c-nc;
        if(n1<0) n1=0;
        if(n2<0) n2=0;
        if(n3<0) n3=0;
        ll p=n1*pb+n2*ps+n3*pc;
        if(rn>=p)
        {
            ans=mid;
            l=mid+1;
        }
        else r=mid-1;
    }
    cout<<ans<<endl;
}

你可能感兴趣的:(二分查找)