二分算法题目训练(三)——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,数 ...
随机推荐
- 音视频入门-10-使用libyuv对YUV数据进行缩放、旋转、镜像、裁剪、混合
* 音视频入门文章目录 * libyuv libyuv 是 Google 开源的实现各种 YUV 与 RGB 之间相互转换.旋转.缩放等的库.它是跨平台的,可在 Windows.Linux.Mac.A ...
- 【SoloPi】SoloPi使用4-功能使用,一机多控
Soloπ是什么Soloπ是一个无线化.非侵入式的Android自动化工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 一机多控功能Soloπ支持通过操作一台主 ...
- C# 不是序列化xml 转实体Model【原家独创】
public static T XmlConvertModel<T>(string xmlStr) where T : class, new() { T ...
- vue+iview tables多个分页实现
如果一个页面有多个分页那么可以把每个page和pageSize放到一个对象中,如下: dataList: { name: 'dataList', // 方便取到dataList对象 id: null, ...
- git push error. ! [rejected] master -> master (non-fast-forward)
错误提示: Cheetah@xxxx MINGW64 /e/Projs/enft/data/cv_key_frame (master) $ git push To github.com:Anthony ...
- Sass和Compass学习笔记系列之Sass
最近在慕课网学习Sass和Compass,学习链接地址:https://www.imooc.com/learn/364,现在整理笔记如下: 一.使用Sass和Compass的优点: a.使用Sass和 ...
- 编写一个stm32 svc关中断函数
做到了让stm32触发svc中断并传递进去参数然后切换到handler模式并修改特殊寄存器的值,从而达到关中断,但是其实这个程序直接就是特权级,故不进入handler模式也可以修改特殊寄存器..... ...
- 【前端适配】vw单位移动端适配方案
近些年移动端的强势崛起,导致移动端适配越来越重要,个人之前一直使用的是rem进行适配,但是发现并不是非常完美,给力的是大漠老师写了一篇<如何在Vue项目中使用vw实现移动端适配>,比较完美 ...
- MySQL增删查改语句(入门)
目录 create alter: insert delete update select 数据库定义语句: create:创建数据库及表对象 drop:删除数据库及表对象 alter:修改数据库及表对 ...
- 编译安装的httpd实现服务脚本,通过service和chkconfig进行管理
把编译安装的httpd 实现服务脚本,通过service和chkconfig 进行管理 1 编译安装httpd 把httpd编译安装在/app/httpd/目录下. 2 在/etc/rc.d/init ...