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 ...
随机推荐
- UVA 11090 Going in Cycle!! SPFA判断负环+二分
原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- python学习笔记1-numpy/enumerate
1. np.size和np.prod import numpy as np x = np.zeros((3, 5, 2), dtype=np.complex128) # ndarray.size is ...
- 【Linxu】CentOS7下安装程序报错:
进入root用户,然后编辑 vi /usr/libexec/urlgrabber-ext-down 将首行换成 #!/usr/bin/python2.
- django 设置局域网内访问项目
1. 关闭主机电脑上的防火墙(或者不用关闭,加一个端口号就行) 2.在你的settings.py文件中,找到ALLOWED_HOSTS=[ ],在中括号中加入你在局域网中的IP.例:我在局域网中的IP ...
- c++对象内存模型【内存布局】(转)
总结:1.按1继承顺序先排布基于每个父类结构.2.该结构包括:基于该父类的虚表.该父类的虚基类表.父类的父类的成员变量.父类的成员变量.3.多重继承且连续继承时,虚函数表按继承顺序排布函数与虚函数.4 ...
- 什么是猴子补丁(monkey patch)
monkey patch指的是在执行时动态替换,通常是在startup的时候. 用过gevent就会知道,会在最开头的地方gevent.monkey.patch_all();把标准库中的thread/ ...
- mysqldump导入导出详解
mysqldump可以指定路径的,如果没指定路径,而只写了文件名的话,那么就在当前进入mysql命令行所在的目录,也就是mysql安装目录下 mysqldump --default-characte ...
- python去除停用词(结巴分词下)
python 去除停用词 结巴分词 import jieba #stopwords = {}.fromkeys([ line.rstrip() for line in open('stopword. ...
- 将iconv编译成lua接口
前一篇博文说了.在cocos2dx中怎么样使用iconv转码,这节我们将上一节中写的转码函数,做成一个lua接口.在lua脚本中使用. 网上能够下载到luaconv.可是编译的时候总是报错,所以自己写 ...
- C++零基础到入门
(1)C语言概述 (2)编写.运行一个简单的C语言程序 (3)数据类型 (4)运算符和表达式 如果你对C语言一窍不通,那你就好好看这篇文章,我会力争让你真正的做到从零基础到入门,同时这篇文章会让你基本 ...