Hamburgers [CF-371C]
来源:互联网 发布:sql server2008和2016 编辑:程序博客网 时间:2024/05/16 01:42
http://codeforces.com/problemset/problem/371/C
最好的做法:二分答案。根据枚举的答案判断是否能做出这个数量的汉堡,不断优化答案。(需要注意上边界,不要忘了原有的材料数)。
代码:
#include<iostream>#include<cstdio>#include<cstring> #include<cmath>#define LL long longusing namespace std;int nb,ns,nc;int pb,ps,pc;long long m;char a[109];int b,s,c;bool check(LL x){ LL need=0; if(x*b>nb) need+=(x*b-nb)*pb; if(x*c>nc) need+=(x*c-nc)*pc; if(x*s>ns) need+=(x*s-ns)*ps; if(need<=m) return true; else return false;}int main(){ scanf("%s",a); for(int i=0;i<strlen(a);i++) { if(a[i]=='B') b++; else if(a[i]=='C') c++; else s++; } scanf("%d%d%d",&nb,&ns,&nc); scanf("%d%d%d",&pb,&ps,&pc); scanf("%I64d",&m); LL l=0;//min(nb/b,min(nc/c,ns/s));不可以,b,s,c可能是0 LL r=m+101; if(nc+m/pc<c||nb+m/pb<b||nc+m/pc<c){ printf("0\n"); return 0; } while(l<=r) { LL mid=(l+r)>>1; if(check(mid)) l=mid+1; else r=mid-1; } printf("%I64d\n",r); return 0;}
还有一个写起来比较麻烦,但是比较好想的写法,就是贪心。
尽可能地将原有材料耗光(这个过程中可能要花钱)。
最后一个整除就可以啦。
写了三次才过QAQ
#include<iostream>#include<cstdio>#include<cstring> #include<cmath>#define LL long longusing namespace std;int nb,ns,nc;int pb,ps,pc;LL m;char a[109];int b,s,c;LL ans;int main(){ scanf("%s",a); for(int i=0;i<strlen(a);i++) { if(a[i]=='B') b++; else if(a[i]=='C') c++; else s++; } scanf("%d%d%d",&nb,&ns,&nc); scanf("%d%d%d",&pb,&ps,&pc); scanf("%I64d",&m); if(ns+m/ps<s||nb+m/pb<b||nc+m/pc<c){ printf("0\n"); return 0; } int nedone=b*pb+c*pc+s*ps; int dx=100000000; if(c) dx=min(dx,nc/c); if(s) dx=min(dx,ns/s); if(b) dx=min(dx,nb/b); ns-=s*dx;nb-=b*dx;nc-=c*dx; ans+=dx; if(!c) nc=0;if(!b) nb=0;if(!s) ns=0;//防止下面的循环超时!我就在这里TLE过一次 while(nb||ns||nc) { int cost=0; if(nb>=b) nb-=b; else cost+=(b-nb)*pb,nb=0; if(nc>=c) nc-=c; else cost+=(c-nc)*pc,nc=0; if(ns>=s) ns-=s; else cost+=(s-ns)*ps,ns=0; if(cost>m) break; else m-=cost,ans++; } ans+=m/nedone; printf("%I64d\n",ans); return 0;}
阅读全文
1 1
- Hamburgers [CF-371C]
- CodeForces 371C Hamburgers
- Codeforces 371C Hamburgers
- Codeforces 371C Hamburgers
- CodeForces 371C Hamburgers
- 【CodeForces】[371C]Hamburgers
- CodeForces 371C Hamburgers
- CodeForces 371C Hamburgers
- Hamburgers - CodeForces 371C 二分
- CodeForces 371C Hamburgers(二分)
- 二分-Codeforces 371C Hamburgers
- Codeforces 371C Hamburgers 【二分】
- C. Hamburgers
- C. Hamburgers
- CodeForces 371C Hamburgers (二分)
- CodeForces 371C-Hamburgers(二分搜索)
- 【CodeForces】371C - Hamburgers(二分)
- CodeForces 371C Hamburgers (二分)
- MQTT消息服务器搭建--Apollo
- 射线Ray实现点击拾取
- jQuery中的extend函数
- Java的JIT编译优化技术
- kettle 读取表数据设置成变量
- Hamburgers [CF-371C]
- IC设计基础系列之低功耗篇6:(数字IC)低功耗设计入门(六)——门级电路低功耗设计优化
- 使用MUI 软键盘弹起挤压页面
- mybatis批量删除
- MongoDB教程之聚合(count、distinct和group)
- 持续集成篇-- SonarQube代码质量管理平台的配置与使用
- 清除wnTKYg 这个挖矿工木马的过程讲述
- 操作系统服务:logging日志记录模块
- Liferay Portal 主题开发让项目的样式更加随心所欲 (五)