二分算法题目训练(三)——Anton and Making Potions详解
codeforces734C——Anton and Making Potions详解
- Anton and Making Potions
题目描述(google翻译)
安东正在玩一个非常有趣的电脑游戏,但现在他被困在其中一个级别。为了进入下一个级别,他必须准备n个药水。
安东有一个特殊的水壶,可以在x秒内准备一个魔药。此外,他知道两种类型的法术可以加快准备魔药的过程。
这种类型的法术加速了一种魔药的准备时间。有这种类型的m个法术,其中第i个成本为bi manooints并且将每个药水的准备时间改为ai而不是x。
这种类型的法术立即准备了一些魔药。有这样的法术,其中第i个成本为di manapoints并立即创造ci药水。
安东可以使用不超过一种类型的第一种类型的咒语和不超过一种第二种类型的咒语,并且消耗的总数不应超过s。考虑到所有法术都会在安东开始准备魔药之前立即使用。安东希望尽可能快地达到一个新的水平,所以他感兴趣的是他需要花费最少的时间来准备至少n个药水。
- 输入
输入的第一行包含三个整数n,m,k(1≤n≤2·109,1≤m,k≤2·105) - 安东必须制作的药水数量,咒语的数量第一种类型和第二种类型的法术数量。
输入的第二行包含两个整数x和s(2≤x≤2·109,1≤s≤2·109) - 准备一个药水所需的初始秒数和Anton可以使用的manapoints数量。
第三行包含m个整数ai(1≤ai<x) - 如果使用第一个类型的第i个咒语,则准备一个药水所需的秒数。
第四行包含m个整数bi(1≤bi≤2·109) - 使用第一个类型的第i个咒语的manapoints数。
第五行中有k个整数ci(1≤ci≤n) - 如果使用第二种类型的第i个咒语,将立即创建的药水数量。保证ci不减小,即如果i <j,则ci≤cj。
第六行包含k个整数di(1≤di≤2·109) - 使用第二种类型的第i个咒语所需的manapoints数。保证di不降低,即如果i <j,则di≤dj。
- 输出
- 打印一个整数 - 为了准备n个药水而必须花费的最短时间。
- 样例输入 1
20 3 2
10 99
2 4 3
20 10 40
4 15
10 80
- 样例输出 1
20
- 样例输入 2
20 3 2
10 99
2 4 3
200 100 400
4 15
100 800
- 样例输出 2
200
- 问题分析
- 题目隐含的条件是 B 药水的两个数组是非递减的
- 需要二分的是 B 药水的 manapoints 消耗数
- 遍历 A 药水,通过二分选择 B 药水,最后选择一个最小的答案
- 初始化的时候要注意考虑可能 A,B 药水都用不上这种情况
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define Maxn 2000003 using namespace std; typedef long long int LL; LL n,m,k,x,s,x1,s1; LL a_short_time[Maxn] = {};
LL a_cost[Maxn] = {}; LL b_pro_num[Maxn] = {};
LL b_cost[Maxn] = {}; int main()
{
ios::sync_with_stdio(false);
cin>>n>>m>>k>>x>>s;
LL i = ;
LL ans = n*x;
for(i = ; i <= m; i++)
cin >> a_short_time[i];
a_short_time[] = x;
for(i = ; i <= m; i++)
cin >> a_cost[i];
for(i = ; i <= k; i++)
cin >> b_pro_num[i];
for(i = ; i <= k; i++)
cin >> b_cost[i];
for(i = ; i <= m; i++)
{
if(s >= a_cost[i])
{
LL s1 = s - a_cost[i];
LL l = ,r = k;
while(l < r)
{
LL mid = (l + r) / ;
if(b_cost[mid] <= s1)
{
if(b_cost[mid+] > s1)
{
l = mid;
break;
}
else
l = mid + ;
}
else
r = mid;
}
ans = min(ans,a_short_time[i]*(n-b_pro_num[l]));
}
}
cout << ans;
return ;
}
二分算法题目训练(三)——Anton and Making Potions详解的更多相关文章
- 二分算法题目训练(一)——Shell Pyramid详解
HDU2446——Shell Pyramid 详解 Shell Pyramid 题目描述(Google 翻译的) 在17世纪,由于雷鸣般的喧嚣,浓烟和炽热的火焰,海上的战斗与现代战争一样.但那时,大炮 ...
- 二分算法题目训练(二)——Exams详解
CodeForces732D——Exams 详解 Exam 题目描述(google翻译) Vasiliy的考试期限将持续n天.他必须通过m门科目的考试.受试者编号为1至m. 大约每天我们都知道当天可以 ...
- 二分算法题目训练(四)——Robin Hood详解
codeforces672D——Robin Hood详解 Robin Hood 问题描述(google翻译) 我们都知道罗宾汉令人印象深刻的故事.罗宾汉利用他的射箭技巧和他的智慧从富人那里偷钱,然后把 ...
- Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
- SaltStack 入门到精通第三篇:Salt-Minion配置文件详解
SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ 发布日期:2014-06-09 17:52:16 ##### 主要配置设置 ##### 配置 默认值 ...
- libsvm的安装,数据格式,常见错误,grid.py参数选择,c-SVC过程,libsvm参数解释,svm训练数据,libsvm的使用详解,SVM核函数的选择
直接conda install libsvm安装的不完整,缺几个.py文件. 第一种安装方法: 下载:http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm. ...
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
- 三:python 对象类型详解一:数字(上)
一:python 的数字类型: a)整数和浮点数 b)复数 c)固定精度的十进制数 d)有理分数 e)集合 f)布尔类型 g)无穷的整数精度 h)各种数字内置函数和模块 二:各种数字类型的详解 1,数 ...
随机推荐
- Linux上安装pstree命令(-bash: pstree: command not found)
一.pstree命令的安装 1.在 Mac OS上 brew install pstree 2.在 Fedora/Red Hat/CentOS yum -y install psmisc 3.在 Ub ...
- Windows10 图标变白修复
Windows10 图标变白修复 本文作者:天析 作者邮箱:2200475850@qq.com 发布时间: Tue, 16 Jul 2019 10:54:00 +0800 这种问题多半是ico缓存造成 ...
- Python 简单web服务器的实现
import re import socket def service_cilent(new_socket): request = new_socket.recv(1024).decode(" ...
- linux 安装mysql(rpm文件安装)
三 卸载旧版本的MySql (没有的话,则跳过此步骤) 1.查看旧版本MySql rpm -qa | grep mysql 将会列出旧版本MySql的组件列表,如: ...
- 缓存数据库memcache、redis原理对比
一.问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里 ...
- 动态URL是什么?动态URL有什么特点?
动态URL是什么动态URL就是动态页面,动态链接,即指在URL中出现“?”这样的参数符号,并以aspx.asp.jsp.php.perl.cgi为后缀的url. 动态URL有什么特点1.在建设反向链接 ...
- Scala 中 call by name & call by value 的区别
call by value:会先计算参数的值,然后再传递给被调用的函数 call by name:参数会到实际使用的时候才计算 定义方法 def return1():Int = { println(& ...
- 如何写好demo——学习感悟
文章标题:教你如何写好Demo应用 如何制作出最有用的demo呢? 简,易 在demo中,我们要专注于单一的主题.我们的教学覆盖了很大的知识范围,因此,化整为零是非常必要的. 例如,我们要说明Andr ...
- Codeforces Round #525 (Div. 2) D. Ehab and another another xor problem(交互题 异或)
题目 题意: 0≤a,b<2^30, 最多猜62次. 交互题,题目设定好a,b的值,要你去猜.要你通过输入 c d : 如果 a^c < b^d ,会反馈 -1 : 如果 a^c = b^ ...
- webuploader只选择单张图片
webuploader只选择单张图片 一.总结 一句话总结: 在WebUploader.create中配置一下pick即可 pick: { id: '#filePicker', multiple:fa ...