二分算法题目训练(三)——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,数 ...
随机推荐
- YIii2.0-学习笔记之服务器安装
最近项目需要,学习了一下yii2.0框架 第一步: 安装composer--------作为一个phper composer不会用可能有点不合适 下载composer.phar文件 #curl - ...
- shell 学习笔记4-shell内置变量命令
一.shell 的一些内置命令 常用的一内部命令有:echo.eval.exec.export.read.shift 1.echo命令-在屏幕中输出信息 1)说明 格式:echo args #< ...
- poj 3252 数位dp
题意:一个二进制的数,如果0的个数大于1的个数,那么我们称这个数为Round Numbers,求给定区间(十进制表示)中Round Numbers的个数 题解:数位dp,不过这里枚举的时候lead标记 ...
- raspbian buster阿里镜像
配置以前,谨记教诲,先去看一下是否有对应版本的源,如下所示,阿里这更新速度...确实挺赶潮流的 最后就是正常更新即可,这样就快多了,要不然用国外的源,还不知道要等到猴年马月的. sudo apt-ge ...
- 海量数据处理的 Top K 相关问题
Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对 ...
- [转]全网最!详!细!tarjan算法讲解
转发地址:https://blog.csdn.net/qq_34374664/article/details/77488976 原版的地址好像挂了..... 看到别人总结的很好,自己就偷个懒吧..以下 ...
- FI-TCODE收集
主数据:FS00 编辑总帐科目FS01 创建主记录FS02 更改主记录FS03 显示主记录FS04 总帐科目更改(集中地 ...
- 安卓开发之cache 的使用(图片查看器案例)
package com.lidaochen.test; import android.graphics.Bitmap; import android.graphics.BitmapFactory; i ...
- Vue框架之初识
介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式的ViewModel层,它连接视图和数据绑定模型通过两种方式.实际的DOM操作和输出格式被抽象的方式到 ...
- python与mysql的数据交互
一 Python 中操作 MySQL 步骤 1.1 安装pymysql命令 sudo pip3 install pymysql 安装软件:sudo apt-get install 软件名称 安装模块: ...