思路:用二分的方法求最多能做几个汉堡,简单安全。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long han[4],num[4],pri[4],m;
char s[110];
bool solve(long long mi)
{ long long num1=mi*han[1],num2=mi*han[2],num3=mi*han[3];
num1=max(0LL,num1-num[1]);
num2=max(0LL,num2-num[2]);
num3=max(0LL,num3-num[3]);
if(num1*pri[1]+num2*pri[2]+num3*pri[3]-m<=0)
return true;
else
return false;
}
int main()
{ int i,j,k,len;
long long l,r,mi;
scanf("%s",s);
len=strlen(s);
han[1]=0;
han[2]=0;
han[3]=0;
for(i=0;i<len;i++)
if(s[i]=='B')
han[1]++;
else if(s[i]=='S')
han[2]++;
else
han[3]++;
scanf("%I64d%I64d%I64d",&num[1],&num[2],&num[3]);
scanf("%I64d%I64d%I64d",&pri[1],&pri[2],&pri[3]);
scanf("%I64d",&m);
l=0;r=100000000000000LL;
while(l<r)
{ mi=(l+r+1)/2;
if(solve(mi))
l=mi;
else
r=mi-1;
}
printf("%I64d\n",l);
}