Codeforces 670D2 Magic Powder-2

来源:互联网 发布:芙丽芳丝洗面奶知乎 编辑:程序博客网 时间:2024/05/19 03:28

题意:做一个蛋糕需要n种面粉,给出每种面粉的使用量及每种面粉的拥有量,同时有k克魔法面粉,它可以转化为任何一种面粉,求最多可以做多少个蛋糕

解题思路:二分法判断可行解.枚举蛋糕的个数,判断解是否可行并缩小解区间,如果那些面粉不能做出mid个蛋糕则说明解不可行

代码:

#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cmath>#include <cstdio>using namespace std;#define INF 0x3f3f3f3ftypedef long long int ll;int a[100005],b[100005];ll n,k;bool judge(int x){    int flag=0;    ll k0=k;    for(int i=0;i<n;i++)    {        if(b[i]/a[i]<x)        {            ll temp=(b[i]+k0)/a[i];            if(temp<x){flag=1;break;}            else k0-=a[i]*x-b[i];        }    }    if(flag)return false;    return true;}int main(){    while(cin>>n>>k)    {        memset(a,0,sizeof(a));        memset(b,0,sizeof(b));        for(int i=0;i<n;i++)        {            cin>>a[i];        }        for(int i=0;i<n;i++)        {            cin>>b[i];        }        ll lb=0,ub=2e9;        ll ans;        while(ub>=lb)        {            ll mid=(ub+lb)/2;            if(judge(mid))ans=mid,lb=mid+1;            else ub=mid-1;            //cout<<mid<<endl;        }        cout<<ans<<endl;    }    return 0;}


原创粉丝点击