C. Anton and Making Potions 贪心 + 二分
http://codeforces.com/contest/734/problem/C
因为有两种操作,那么可以这样考虑,
1、都不执行,就是开始的答案是n * x
2、先执行第一个操作,然后就会得到一个time和left。就是你会得到一个新的用时,和一个剩下的魔法数,然后在第二个操作数中二分,二分第一个小于等于left的值,意思就是我现在还拥有left点魔法,能够买最多多少个技能的意思。
就是,看着样例一
得到的会是
time : 40s 80s 60s
left : 79 89 59
3、同理,可以先执行第二种操作,再执行第一种操作。这就需要我们把第一种操作的东西排序了。这里用到了贪心,排序第一是按照需要的魔法数来排,第二是按照a[i]从大到小。(这里又fst,唉,一个符号)。因为这样是最优的。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
const int maxn = 1e6 + ;
LL a[maxn];
LL b[maxn];
struct node {
LL c, d;
node(LL cc, LL dd) : c(cc), d(dd) {}
node() {}
bool operator < (const struct node & rhs) const {
return d < rhs.d;
}
}arr[maxn];
struct tt {
LL tim, lef;
LL id;
}ff[maxn];
struct bug {
LL a, b;
int id;
bug() {}
bug(LL aa, LL bb) : a(aa), b(bb) {}
bool operator < (const struct bug & rhs) const {
if (b != rhs.b) return b < rhs.b;
else return a > rhs.a; //这个按大排
}
}gg[maxn];
void work() {
LL n, m, k;
cin >> n >> m >> k;
LL x, limit;
cin >> x >> limit;
for (int i = ; i <= m; ++i) {
cin >> a[i];
gg[i].a = a[i];
}
for (int i = ; i <= m; ++i) {
cin >> b[i];
gg[i].b = b[i];
gg[i].id = i;
}
sort(gg + , gg + + m);
for (int i = ; i <= k; ++i) {
cin >> arr[i].c;
}
for (int i = ; i <= k; ++i) {
cin >> arr[i].d;
}
LL ans = n * x;
int lenff = ;
// cout << x << endl;
for (int i = ; i <= m; ++i) {
if (b[i] > limit) continue;
++lenff;
ff[lenff].tim = n * a[i];
ff[lenff].lef = limit - b[i];
ff[lenff].id = i;
}
// for (int i = 1; i <= lenff; ++i) {
// cout << ff[i].tim << " " << ff[i].lef << endl;
// }
for (int i = ; i <= lenff; ++i) {
ans = min(ans, ff[i].tim);
if (ff[i].lef < arr[].d) continue;
int pos = upper_bound(arr + , arr + + k, node(0L, ff[i].lef)) - arr;
pos--;
LL t = ff[i].tim - arr[pos].c * a[ff[i].id];
ans = min(ans, t);
}
lenff = ;
for (int i = ; i <= k; ++i) {
if (arr[i].d > limit) continue;
++lenff;
ff[lenff].lef = limit - arr[i].d;
ff[lenff].tim = (n - arr[i].c) * x;
ff[lenff].id = n - arr[i].c;
}
for (int i = ; i <= lenff; ++i) {
ans = min(ans, ff[i].tim);
if (ff[i].lef < gg[].b) continue;
int pos = upper_bound(gg + , gg + + m, bug(, ff[i].lef)) - gg;
pos--;
LL t = ff[i].id * a[gg[pos].id];
ans = min(ans, t);
}
cout << ans << endl;
} int main() {
#ifdef local
freopen("data.txt","r",stdin);
#endif
IOS;
work();
return ;
}
C. Anton and Making Potions 贪心 + 二分的更多相关文章
- 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 734C Anton and Making Potions(枚举+二分)
题目链接:http://codeforces.com/problemset/problem/734/C 题目大意:要制作n个药,初始制作一个药的时间为x,魔力值为s,有两类咒语,第一类周瑜有m种,每种 ...
- CodeForce-734C Anton and Making Potions(贪心+二分)
CodeForce-734C Anton and Making Potions C. Anton and Making Potions time limit per test 4 seconds m ...
- 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 —— 二分
题目链接:http://codeforces.com/contest/734/problem/C C. Anton and Making Potions time limit per test 4 s ...
- 二分算法题目训练(三)——Anton and Making Potions详解
codeforces734C——Anton and Making Potions详解 Anton and Making Potions 题目描述(google翻译) 安东正在玩一个非常有趣的电脑游戏, ...
- [二分] Codefoces Anton and Making Potions
Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input sta ...
- Anton and Making Potions
Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input sta ...
- poj 2782 Bin Packing (贪心+二分)
F - 贪心+ 二分 Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description ...
随机推荐
- Android-利用LinearGradient实现文字一闪一闪
效果如下图所示: 具体实现方式如下: 1,自定义一个LinearGradientTextView 继承 TextView ,重写onSizeChanged和onDraw.: public class ...
- C#开发遇到的常见问题及知识点
今天遇到的类型初始值设定项引发异常的原因是:类没有添加[Serializable]属性. this.DialogResult = System.Windows.Forms.DialogResult.O ...
- CISCO-路由器交换机IOS被删,恢复方法
方式一,tftpdnld方式恢复Router 2600 IOS 1) 将计算机串口和路由器console口相连 一定将计算机网口与路由器第一个以太口f0/0相连. 2) 启动TFTP服务器,并将要下载 ...
- npm 引入第三方过滤器
根据项目具体情况使用过滤器,如果不满足业务需求可以在vue的全局或者局部自定义fiter(过滤器) 一下是github提供的第三方过滤器: https://github.com/freearhey/v ...
- mysql 入门 1
连接mysql服务器 mysql -h localhost -u username -ppasswd 1.查看服务器存在的库 show databases; 2.创建数据库 create databa ...
- 配置web应用
web应用配置虚拟主机1.web应用的虚拟路径映射,就是web应用的真实存在的路径配置一个虚拟路径 在conf目录下的Server.xml 的<Host>标签中,配置<Context ...
- 3.清除dns缓存的意义及命令?
1.dos命令:ipconfig /flushdns 2.意义: 简单地说就是 www.baidu.com ,www.sina.com 这些就是DNS域名.但是计算机不能直接通过DNS域名访问服务器( ...
- no more URLs to fetch
Generator: records selected for fetching, exiting ... Stopping at depth= - no more URLs to fetch. 出现 ...
- linux中的条件变量
1 大家可能知道互斥量是线程程序中必须的工具了,但是也不能是万能的,就比如某个线程正在等待共享数据某个条件的发生,这个时候会发生什么呢.它就可能重复的尝试对互斥对象锁定和解锁来检查共享数据结构. 2 ...
- 微信小程序开发之页面跳转并携带参数
接口: wx.navigateTo({url:......}) 保留当前页面,跳转到应用内指定URL页面,导航栏左上角有返回按钮 wx.redirecTo({url:.....}) 关 ...