cf C. Hamburgers

http://codeforces.com/contest/371/problem/C

二分枚举最大汉堡包数量就可以。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; char s[];
int n1,n2,n3;
int p1,p2,p3;
__int64 m;
int t1,t2,t3;
bool ok(__int64 x)
{
__int64 ans=;
if(x*t1-n1>=)
ans+=(__int64)((x*t1-n1)*p1);
if(x*t2-n2>=)
ans+=(__int64)((x*t2-n2)*p2);
if(x*t3-n3>=)
ans+=(__int64)((x*t3-n3)*p3);
if(ans<=m) return true;
else return false;
} int main()
{
while(scanf("%s",s)!=EOF)
{
t1=; t2=; t3=;
scanf("%d%d%d",&n1,&n2,&n3);
scanf("%d%d%d",&p1,&p2,&p3);
__int64 max1=(n1>n2?n1:n2)>n3?(n1>n2?n1:n2):n3;
scanf("%I64d",&m);
int k=strlen(s);
for(int i=; i<k; i++)
{
if(s[i]=='B') t1++;
else if(s[i]=='S') t2++;
else if(s[i]=='C') t3++;
}
__int64 l=,r=m+max1;
__int64 ans=;
while(l<=r)
{
__int64 mid=(l+r)/;
if(ok(mid))
{
ans=mid;
l=mid+;
}
else
r=mid-;
}
printf("%I64d\n",ans);
}
return ;
}
上一篇:JAVA好书之《深入理解Java虚拟机》


下一篇:【Java面试宝典】深入理解JAVA虚拟机