[Codeforces]Hamburgers
原题链接
Codeforces真是太棒了
全英文请自行翻译
二分
注意边界条件
再次因为这个错了
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 1000000007
#define LL long long
using namespace std;char h[105];
LL len,i,y[4],nb,ns,nc,pb,ps,pc,t,t2;
LL rub,l,r;LL check(LL x)
{LL mon,ned;mon=0;ned=x*y[1];if(ned>nb) mon+=(ned-nb)*pb;ned=x*y[2];if(ned>ns) mon+=(ned-ns)*ps;ned=x*y[3];if(ned>nc) mon+=(ned-nc)*pc;return mon<=rub;
}int main()
{scanf("%s",h);len=strlen(h);for(i=0;iif(h[i]=='B') y[1]++;if(h[i]=='S') y[2]++;if(h[i]=='C') y[3]++; }scanf("%I64d%I64d%I64d",&nb,&ns,&nc);scanf("%I64d%I64d%I64d",&pb,&ps,&pc);scanf("%I64d",&rub);r=1e12+100;while(l<=r){LL mid=(l+r)/2;t=check(mid);if(t) l=mid+1;else r=mid-1;}t=check(r);if(t) printf("%I64d",r);else printf("0"); return 0;
}
贪心
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 1000000007
#define LL long long
using namespace std;char h[105];
LL i,len,y[4],n[4],p[4],cb,ans,rub;int main()
{scanf("%s",h);len=strlen(h);for(i=0;iif(h[i]=='B') y[1]++;if(h[i]=='S') y[2]++;if(h[i]=='C') y[3]++; }scanf("%I64d%I64d%I64d",&n[1],&n[2],&n[3]);scanf("%I64d%I64d%I64d",&p[1],&p[2],&p[3]);scanf("%I64d",&rub);cb=p[1]*y[1]+p[2]*y[2]+p[3]*y[3];while((n[1]||n[2]||n[3])&&rub){if(!y[1]) n[1]=0;if(!y[2]) n[2]=0; if(!y[3]) n[3]=0;if(y[1]){if(n[1]>y[1]) n[1]-=y[1];else {rub-=(y[1]-n[1])*p[1];n[1]=0; if(rub<0) break; } }if(y[2]){if(n[2]>y[2]) n[2]-=y[2];else {rub-=(y[2]-n[2])*p[2];n[2]=0; if(rub<0) break; }}if(y[3]){if(n[3]>y[3]) n[3]-=y[3];else {rub-=(y[3]-n[3])*p[3];n[3]=0;if(rub<0) break; } }ans++; }if(rub>0) ans+=rub/cb;printf("%I64d",ans);return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
