CodeForces
来源:互联网 发布:三菱plcq系列编程手册 编辑:程序博客网 时间:2024/05/01 17:34
CodeForces - 734C Anton and Making Potions
题目:有n个药剂需要制作,制作每个药剂需要time秒钟,并且最初有w的能量;魔法师现在有两种催化剂,第一种可以消耗fc[i]
的能量,使得所有药剂的所需时间变为fw[i];第二种消耗能量sc[i],使得sw[i]个数的药剂瞬间制作好;但两种催化剂每种只能最多选
择一种,问最后最少需要多少时间;
思路:注意到第二种的催化剂消耗的能量与瞬间制作好的药剂都是递增的,分四种情况:1什么药剂也不用 2只用第一种 3只用第二
种 4两个都用这样虽然繁琐了点,但容易理解,前三种情况都好办,对于两个都用的这种情况,因为第二种催化剂的数据是有序
的,我们可以遍历第一种催化剂,然后二分第二种催化剂,有一点需要注意的是,如果对于某一个第一种催化剂,如果二分之后并
没有可用的第二种催化剂,则跳过这次循环,因为这种情况之前已经计算过了
又一次因为一个long long 的类型写成int wa了好几次
#include<stdio.h>#include<algorithm>typedef long long ll;using namespace std;const int MAXN=200010;const ll INF=0x3f3f3f3f3f3f3f3f;ll fw[MAXN],fc[MAXN];ll sw[MAXN],sc[MAXN];int main(void){ll total,f,s;ll time,w;scanf("%lld%lld%lld%lld%lld",&total,&f,&s,&time,&w);ll ans=total*time;for(int i=1;i<=f;i++) scanf("%lld",&fw[i]);for(int i=1;i<=f;i++) scanf("%lld",&fc[i]);for(int i=1;i<=s;i++) scanf("%lld",&sw[i]);for(int i=1;i<=s;i++) scanf("%lld",&sc[i]); for(int i=1;i<=f;i++){if(fc[i]<=w){ long long temp=total*fw[i]; if(ans>temp) ans=temp; }} for(int i=1;i<=s;i++){if(sc[i]<=w){ long long temp=(total-sw[i])*time; if(ans>temp) ans=temp; }} for(int i=1;i<=f;i++){bool flag=false; ll l=1,r=s,a;int p=w-fc[i];if(p<0) continue;while(l<=r){int mid=(l+r)/2;if(sc[mid]<=p) { a=mid; flag=true; l=mid+1; }else r=mid-1;} if(!flag) continue;//没有二分到第二种催化剂,跳过这次循环ll t=(total-sw[a])*fw[i];if(ans>t) ans=t;} printf("%lld\n",ans);return 0;}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- NOIP2016 组合数问题
- Iput子系统模型探究--2(handler-->以evdev_handler为例)
- 2-4 求交错序列前n项和
- Swagger常用注解API介绍
- 用html制作一个简单的五环
- CodeForces
- [数位DP]Hdu 6148——Valley Number
- CodeVS1267 老鼠的旅行 解题报告【棋盘型DP】
- Mysql中的CONCAT、GROUP_CONCAT使用示例
- CSS弹性盒子模型Flex
- 图片读取格式
- JS小知识
- 解决火狐兼容性问题
- 面向对象基础知识(3)--对象生存周期