Codeforces Round #379 (Div. 2) C. Anton and Making Potions —— 二分
题目链接:http://codeforces.com/contest/734/problem/C
4 seconds
256 megabytes
standard input
standard output
Anton is playing a very interesting computer game, but now he is stuck at one of the levels. To pass to the next level he has to prepare npotions.
Anton has a special kettle, that can prepare one potions in x seconds. Also, he knows spells of two types that can faster the process
of preparing potions.
- Spells of this type speed up the preparation time of one potion. There are m spells of this type, the i-th
of them costs bi manapoints
and changes the preparation time of each potion to ai instead
of x. - Spells of this type immediately prepare some number of potions. There are k such spells, the i-th
of them costs di manapoints
and instantly create ci potions.
Anton can use no more than one spell of the first type and no more than one spell of the second type, and the total number of manapoints
spent should not exceed s. Consider that all spells are used instantly and right before Anton starts to prepare potions.
Anton wants to get to the next level as fast as possible, so he is interested in the minimum number of time he needs to spent in order to prepare at least n potions.
The first line of the input contains three integers n, m, k (1 ≤ n ≤ 2·109, 1 ≤ m, k ≤ 2·105) —
the number of potions, Anton has to make, the number of spells of the first type and the number of spells of the second type.
The second line of the input contains two integers x and s (2 ≤ x ≤ 2·109, 1 ≤ s ≤ 2·109) —
the initial number of seconds required to prepare one potion and the number of manapoints Anton can use.
The third line contains m integers ai (1 ≤ ai < x) —
the number of seconds it will take to prepare one potion if the i-th spell of the first type is used.
The fourth line contains m integers bi (1 ≤ bi ≤ 2·109) —
the number of manapoints to use the i-th spell of the first type.
There are k integers ci (1 ≤ ci ≤ n)
in the fifth line — the number of potions that will be immediately created if the i-th spell of the second type is used. It's guaranteed
that ci are not
decreasing, i.e. ci ≤ cj if i < j.
The sixth line contains k integers di (1 ≤ di ≤ 2·109) —
the number of manapoints required to use the i-th spell of the second type. It's guaranteed that di are not
decreasing, i.e. di ≤ dj if i < j.
Print one integer — the minimum time one has to spent in order to prepare n potions.
20 3 2
10 99
2 4 3
20 10 40
4 15
10 80
20
20 3 2
10 99
2 4 3
200 100 400
4 15
100 800
200
In the first sample, the optimum answer is to use the second spell of the first type that costs 10 manapoints. Thus, the preparation time of each potion changes to 4 seconds. Also, Anton should use the second spell of the second type to instantly prepare 15 potions spending 80 manapoints. The total number of manapoints used is 10 + 80 = 90, and the preparation time is 4·5 = 20 seconds (15potions were prepared instantly, and the remaining 5 will take 4 seconds each).
In the second sample, Anton can't use any of the spells, so he just prepares 20 potions, spending 10 seconds on each of them and the answer is 20·10 = 200.
题解:
由于魔法2是有序的,所以可以对魔法2进行二分。
做法:
1.枚举魔法1, 假设施展完魔法1后,剩下的能量为left, 那么就在能量<=left的情况下,二分出最大效益的魔法2。
2.由于步骤1是在施展完魔法1后,再施展魔法2的,但有时候只施展魔法2可能会更省时, 所以还需要枚举魔法2.
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps = 1e-;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+;
const int maxn = 2e5+; LL a[maxn], b[maxn], c[maxn], d[maxn];
LL n,m,k,x,s; void init()
{
cin>>n>>m>>k>>x>>s;
for(int i = ; i<=m; i++) scanf("%lld",&a[i]);
for(int i = ; i<=m; i++) scanf("%lld",&b[i]);
for(int i = ; i<=k; i++) scanf("%lld",&c[i]);
for(int i = ; i<=k; i++) scanf("%lld",&d[i]);
} int Locate(LL e)
{
int l = , r = k;
while(l<=r)
{
int mid = (l+r)>>;
if(d[mid]<=e)
l = mid+;
else
r = mid-;
}
return r; //返回值的范围: 0 ~ k
} void solve()
{
LL ans = 1LL*n*x;
for(int i = ; i<=m; i++) //枚举魔法1,二分魔法2
{
if(b[i]>s) continue; LL left = s - b[i];
int pos = Locate(left);
// pos = upper_bound(d+1, d+1+k, left) - (d+1);
if(pos<)
ans = min( ans, 1LL*a[i]*n );
else
ans = min( ans, 1LL*a[i]*(n-c[pos]>?n-c[pos]:) );
} int pos = Locate(s); //只是用魔法2
// pos = upper_bound(d+1, d+1+k, s) - (d+1);
if(pos>=)
ans = min( ans, 1LL*x*(n-c[pos]>?n-c[pos]:) ); cout<<ans<<endl;
} int main()
{
init();
solve();
return ;
}
Codeforces Round #379 (Div. 2) C. Anton and Making Potions —— 二分的更多相关文章
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions 二分
C. Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions 枚举+二分
C. Anton and Making Potions 题目连接: http://codeforces.com/contest/734/problem/C Description Anton is p ...
- Codeforces Round #379 (Div. 2) A B C D 水 二分 模拟
A. Anton and Danik time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Codeforces Round #379 (Div. 2) E. Anton and Tree 缩点 直径
E. Anton and Tree 题目连接: http://codeforces.com/contest/734/problem/E Description Anton is growing a t ...
- Codeforces Round #379 (Div. 2) D. Anton and Chess 水题
D. Anton and Chess 题目连接: http://codeforces.com/contest/734/problem/D Description Anton likes to play ...
- Codeforces Round #379 (Div. 2) B. Anton and Digits 水题
B. Anton and Digits 题目连接: http://codeforces.com/contest/734/problem/B Description Recently Anton fou ...
- Codeforces Round #379 (Div. 2) A. Anton and Danik 水题
A. Anton and Danik 题目连接: http://codeforces.com/contest/734/problem/A Description Anton likes to play ...
- Codeforces Round #379 (Div. 2) D. Anton and Chess 模拟
题目链接: http://codeforces.com/contest/734/problem/D D. Anton and Chess time limit per test4 secondsmem ...
- Codeforces Round #379 (Div. 2) E. Anton and Tree —— 缩点 + 树上最长路
题目链接:http://codeforces.com/contest/734/problem/E E. Anton and Tree time limit per test 3 seconds mem ...
随机推荐
- jQuery全选全不选
$("[name='goods']").prop("checked", this.checked);
- rocketMQ--搭建demo的坑
果然不出所料,搭建起来就有坑 ,客户端经典的connection 11911的错误 在我的环境上解决方法加一行配置 brokerClusterName = DefaultClusterbrokerNa ...
- JDK1.8和Spring 3.2.0 的坑
上午 org.apache.catalina.core.StandardContext listenerStart严重: Exception sending context initialized e ...
- Codeforces 471 D MUH and Cube Walls
题目大意 Description 给你一个字符集合,你从其中找出一些字符串出来. 希望你找出来的这些字符串的最长公共前缀*字符串的总个数最大化. Input 第一行给出数字N.N在[2,1000000 ...
- SpringMVC整合fastdfs-client-java实现web文件上传下载
原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...
- [NSThread sleepForTimeInterval:3.0];
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)laun ...
- vbox在共享文件夹设置链接报错Protocol error问题
环境: 基于VBox 的 vagrant (centos版本)开发环境. 问题: Virtualbox 虚拟机(centOS)中,在进行go程序编译的时候,需要设置一个链接符,然后得到了如下的错误: ...
- 【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用
项目中使用实体之间存在一对多@OneToMany,多对一@ManyToOne的映射关系,怎么设置呢? GitHub地址:https://github.com/AngelSXD/myagenorderd ...
- react webapp 开发小结
1.监听props的方法 componentWillReceiveProps(nextProps) { // } 2.监听state的方法 3.props 传递的方法 <AlarmList {. ...
- Django中的模板和分页
模板 在Templates中添加母版: - 母版...html 母版(master.html)中可变化的地方加入: {%block content%}{%endblock%} 在子版 (usermg. ...