CodeForces
来源:互联网 发布:ps3验证游戏数据 编辑:程序博客网 时间:2024/06/08 16:44
http://codeforces.com/problemset/problem/734/C
题意:有n件物品要完成,完成每件物品的时间是x。有两种buff。第一种有m个,每个消耗bi法力值,可以使制作时间变为ai。第二种有k个,每个消耗法力值di,可以瞬间完成ci个物品。现在你有s点法力值,每种buff最多只能使用一个。求最少的完成时间。
题解:枚举第一种buff,然后二分搜索s-bi。因为第二种buff的法力值和完成件数是升序的,可以直接进行二分。
代码:
#include<bits/stdc++.h>#define debug cout<<"aaa"<<endl#define mem(a,b) memset(a,b,sizeof(a))#define LL long long#define lson l,mid,root<<1#define rson mid+1,r,root<<1|1#define MIN_INT (-2147483647-1)#define MAX_INT 2147483647#define MAX_LL 9223372036854775807i64#define MIN_LL (-9223372036854775807i64-1)using namespace std;const int N = 200000 + 5;const int mod = 1000000000 + 7;LL a[N],b[N],c[N],d[N];LL n,m,k;LL x,s,fa;int l,r,mid,pos;LL ans,temp;int main(){mem(a,0),mem(b,0),mem(c,0),mem(d,0);scanf("%I64d%I64d%I64d",&n,&m,&k);scanf("%I64d%I64d",&x,&s);ans=x*n;for(int i=1;i<=m;i++){scanf("%I64d",&a[i]);}for(int i=1;i<=m;i++){scanf("%I64d",&b[i]);}for(int i=1;i<=k;i++){scanf("%I64d",&c[i]);}for(int i=1;i<=k;i++){scanf("%I64d",&d[i]);}//加上这个a[0]是,不用第一种buff的情况 a[0]=x,ans=x*n;for(int i=0;i<=m;i++){fa=s-b[i];if(fa<0){continue;}l=0,r=k,pos=k;while(l<=r){mid=(l+r)>>1;if(d[mid]>fa){r=mid-1;}else{pos=mid;l=mid+1;}}temp=(n-c[pos])*a[i];ans=min(ans,temp);}printf("%I64d\n",ans);return 0;}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- java面向对象的各种关系总结(UML)
- 关于递归的总结——汉诺塔、素因数的求解(Python实现)
- 2.多级菜单
- HDU6092 Rikka with Subset【DP】
- 关于AndroidStudio的快捷键使用
- CodeForces
- 排序算法五——堆排序
- 8.9上课感悟
- 接口作为类型使用
- Lintcode103 Linked List Cycle || solution 题解
- Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
- Mysql 练习题 加Mysql的表
- 【51nod 教程】矩阵取数问题(动态规划)
- 渐进增强和优雅降级之间有什么不同?