CodeForce-734C Anton and Making Potions
 C. Anton and Making Potions
time limit per test

4 seconds

memory limit per test

256 megabytes

input

standard input

output

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.

  1. 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.
  2. 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.

Input

The first line of the input contains three integers nmk (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.

Output

Print one integer — the minimum time one has to spent in order to prepare n potions.

Examples
input

20 3 2
10 99
2 4 3
20 10 40
4 15
10 80

output

20

input

20 3 2
10 99
2 4 3
200 100 400
4 15
100 800

output

200

Note

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.

 枚举第一种 spell 用了哪一个(注意可能不用),然后观察到第二种 spell 的收益随着代价增大而增大,尽量选代价最大的,二分即可。

  1 #include<map>
2
3 #include<set>
4
5 #include<stack>
6
7 #include<cmath>
8
9 #include<queue>
10
11 #include<bitset>
12
13 #include<math.h>
14
15 #include<vector>
16
17 #include<string>
18
19 #include<stdio.h>
20
21 #include<cstring>
22
23 #include<iostream>
24
25 #include<algorithm>
26
27 #pragma comment(linker, "/STACK:102400000,102400000")
28
29 using namespace std;
30
31 typedef double db;
32
33 typedef long long ll;
34
35 typedef unsigned int uint;
36
37 typedef unsigned long long ull;
38
39 const db eps=1e-5;
40
41 const int N=2e5+10;
42
43 const int M=4e6+10;
44
45 const ll MOD=1000000007;
46
47 const int mod=1000000007;
48
49 const int MAX=1000000010;
50
51 const double pi=acos(-1.0);
52
53 ll a[N],b[N],c[N],d[N];
54
55 int main()
56
57 {
58
59 int i,m,k,l,r,mid;
60
61 ll n,x,s,t,ans;
62
63 scanf("%I64d%d%d", &n, &m, &k);
64
65 scanf("%I64d%I64d", &x, &s);
66
67 for (i=1;i<=m;i++) scanf("%I64d", &a[i]);
68
69 for (i=1;i<=m;i++) scanf("%I64d", &b[i]);
70
71 for (i=1;i<=k;i++) scanf("%I64d", &c[i]);
72
73 for (i=1;i<=k;i++) scanf("%I64d", &d[i]);
74
75
76 ans=n*x;
77
78 for (i=1;i<=k;i++)
79
80 if (d[i]<=s) ans=min(ans,x*max(0ll,n-c[i]));
81
82
83 for (i=1;i<=m;i++)
84
85 if (b[i]<=s&&a[i]<x) {
86
87 t=s-b[i];
88
89 if (t<d[1]) ans=min(ans,n*a[i]);
90
91 else {
92
93 l=1;r=k+1;mid=(l+r)>>1;
94
95 while (l+1<r)
96
97 if (d[mid]<=t) l=mid,mid=(l+r)>>1;
98
99 else r=mid,mid=(l+r)>>1;
100
101 ans=min(ans,max(0ll,n-c[l])*a[i]);
102
103 }
104
105 }
106
107 printf("%I64d\n", ans);
108
109 return 0;
110
111 }

CodeForce-734C Anton and Making Potions(贪心+二分)的更多相关文章

  1. C. Anton and Making Potions 贪心 + 二分

    http://codeforces.com/contest/734/problem/C 因为有两种操作,那么可以这样考虑, 1.都不执行,就是开始的答案是n * x 2.先执行第一个操作,然后就会得到 ...

  2. Codeforces 734C Anton and Making Potions(枚举+二分)

    题目链接:http://codeforces.com/problemset/problem/734/C 题目大意:要制作n个药,初始制作一个药的时间为x,魔力值为s,有两类咒语,第一类周瑜有m种,每种 ...

  3. 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 ...

  4. Codeforces 734C. Anton and Making Potions(二分)

    Anton is playing a very interesting computer game, but now he is stuck at one of the levels. To pass ...

  5. 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 ...

  6. Codeforces Round #379 (Div. 2) C. Anton and Making Potions —— 二分

    题目链接:http://codeforces.com/contest/734/problem/C C. Anton and Making Potions time limit per test 4 s ...

  7. 二分算法题目训练(三)——Anton and Making Potions详解

    codeforces734C——Anton and Making Potions详解 Anton and Making Potions 题目描述(google翻译) 安东正在玩一个非常有趣的电脑游戏, ...

  8. [二分] Codefoces Anton and Making Potions

    Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input sta ...

  9. Anton and Making Potions

    Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input sta ...

随机推荐

  1. 活久见!TCP两次挥手,你见过吗?那四次握手呢?

    活久见!TCP两次挥手,你见过吗?那四次握手呢? 文章持续更新,可以微信搜一搜「小白debug」第一时间阅读,回复[教程]获golang免费视频教程.本文已经收录在GitHub https://git ...

  2. vivo商城计价中心 - 从容应对复杂场景价格计算

    一.背景 随着vivo商城的业务架构不断升级,整个商城较为复杂多变的营销玩法被拆分到独立的促销系统中. 拆分后的促销系统初期只是负责了营销活动玩法的维护,促销中最为重要的计价业务仍然遗留在商城主站业务 ...

  3. SQL 练习27

    查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 SELECT cid,AVG(score) 平均成绩 from sc GROUP BY cid ORDER BY A ...

  4. Something about 树链剖分

    声明:部分思路与图片源于OI Wiki 关于树链剖分 树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息. 树链剖分有多种形式,如 重链剖分,长链剖分 和用于 $LCT$ 的剖分,大多数情况下 ...

  5. Splay做题笔记

    模板 题目描述: 辣鸡ljh NOI之后就退役了,然后就滚去学文化课了. 他每天都被katarina大神虐,仗着自己学过一些姿势就给katarina大神出了一道题. 有一棵 \(n\) 个节点的以 1 ...

  6. SpringBoot整合mybatis快速入门

    一.创建一个SpringBoot项目                 二.引入相关依赖 <!--web核心依赖--> <dependency> <groupId>o ...

  7. C#基础知识---扩展方法

    一.简介 扩展方法为现有的类型(.Net类型或者自定义类型)扩展应该附加到该类型中的方法. 二.基本原则 定义一个非嵌套.非泛型的静态类 扩展方法是静态的 扩展方法至少要有一个参数,该参数类型是要扩展 ...

  8. Git分支创建命令

    一. 创建test分支提交步骤 1.列出所有分支 # git branch -a 2.创建test分支          # git branch test 3.切换到test分支:         ...

  9. C# 中的异步问题 Task

    public class SharedData { public int Value { get; set; } } public class Test { async Task ModifyValu ...

  10. DNS地址列表

    DNS测试工具(DNSBench):https://www.grc.com/dns/benchmark.htm DNS列表收集: Google DNS [URL]https://developers. ...