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 + 20;
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 = 1; i <= m; ++i) {cin >> a[i];gg[i].a = a[i];}for (int i = 1; i <= m; ++i) {cin >> b[i];gg[i].b = b[i];gg[i].id = i;}sort(gg + 1, gg + 1 + m);for (int i = 1; i <= k; ++i) {cin >> arr[i].c;}for (int i = 1; i <= k; ++i) {cin >> arr[i].d;}LL ans = n * x;int lenff = 0;
//    cout << x << endl;for (int i = 1; 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 = 1; i <= lenff; ++i) {ans = min(ans, ff[i].tim);if (ff[i].lef < arr[1].d) continue;int pos = upper_bound(arr + 1, arr + 1 + 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 = 0;for (int i = 1; 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 = 1; i <= lenff; ++i) {ans = min(ans, ff[i].tim);if (ff[i].lef < gg[1].b) continue;int pos = upper_bound(gg + 1, gg + 1 + m, bug(0, ff[i].lef)) - gg;pos--;LL t = ff[i].id * a[gg[pos].id];ans = min(ans, t);}cout << ans << endl;
}int main() {
#ifdef localfreopen("data.txt","r",stdin);
#endifIOS;work();return 0;
}

View Code

转载于:https://www.cnblogs.com/liuweimingcprogram/p/6068303.html

C. Anton and Making Potions 贪心 + 二分相关推荐

  1. [SCOI2005]栅栏(贪心+二分+dfs)难度⭐⭐⭐⭐

    [SCOI2005]栅栏(贪心+二分+dfs) P2329 [SCOI2005]栅栏 题目描述 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材. ...

  2. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an ...

  3. LIS最长上升子序列详解(动态规划、贪心+二分、树状数组)

    1.摘要: 关于LIS部分,本篇博客讲一下LIS的概念定义和理解,以及求LIS的三种方法,分别是O(n^2)的DP,O(nlogn)的二分+贪心法,以及O(nlogn)的树状数组优化的DP,最后附上几 ...

  4. CodeForces - 967D Resource Distribution(贪心+二分+构造)

    题目链接:点击查看 题目大意:给出 n 个机器,每个机器可以处理 a[ i ] 的工作,现在有两个工作需要处理,工作量分别为 x1 和 x2,可以将一个工作分配给 k 个机器同时完成,需要满足: k ...

  5. 牛客 - Sixth Sense(贪心+二分)

    题目链接:点击查看 题目大意:给出两个长度为 n 的数列记为 a 和 b,现在 a 的数列固定不动,问如何对数列 b 进行排列,可以使得: b[ i ] > a[ i ] (严格大于)的位置尽可 ...

  6. CodeForces - 1236D Alice and the Doll(贪心+二分+模拟)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,矩阵中有k个障碍物,在点(1,1)处有一个洋娃娃,洋娃娃每次的行动路线只能是直走或右拐,初始时洋娃娃面朝正右方向,问洋娃娃能否将所有方格都走一遍,并 ...

  7. CF505E-Mr. Kitayuta vs. Bamboos【贪心,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/CF505E 题目大意 开始一个长度为nnn的序列hhh,mmm天每天你可以kkk次选择一个hih_ihi​让它等于h ...

  8. P5021-赛道修建【平衡树,贪心,二分答案】

    正题 题目链接:https://www.luogu.org/problemnew/show/P5021 题目大意 一棵树找mmm条不重边路径使得最短的那条最长. 解题思路 首先最小的最大显然二分一下答 ...

  9. 2017上海金马五校 购买装备 贪心+二分Check

    购买装备 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:05   时间限制: 1000ms   内存限制: 128M 描述 最近盛大的一款游戏传奇世界极其火爆. ...

最新文章

  1. Keil错误Unable to automatically place AT section malloc.o(.ARM.__AT_0x20000000) with required base add
  2. 用python让excel飞起来 pdf_老外用100个巨型吹风机, 想要靠它们飞起来, 你猜结果怎样...
  3. ansole终端链接linux,基于Linux系统的智能家居远程控制系统设计论文.doc
  4. 首届Hadoop技术社区中国meetup来袭!对外报名正式启动!
  5. 哪些贷款是正规的?哪些贷款千万别碰?
  6. iOS UI基础-7.0 UIScrollView
  7. 上传文件显示进度条_【技巧 】iOSamp;Windows互传文件?透过「文件」轻松解决~...
  8. 累积分布函数_C7: 概率函数和分布函数Distribution Function
  9. 【转载】Jsoup设置代理ip访问
  10. 解决VMware Workstation下面Windows Server 2012R2无法安装Hyper-V
  11. python语言和汇编语言_python语言属于汇编语言吗?
  12. 手机图标ui设计尺寸:ui设计app图标尺寸规范
  13. Android 计时器Chronometer 使用及源码分析,常见移动app开发框架
  14. Python实战:将头像变成动漫风
  15. 辽宁大学广播影视学院电影专硕考研上岸经验分享
  16. android如何获取网络的状态码,Android RxJava+Retrofit网络异常、状态码统一处理
  17. CSS常用函数补充(var、clac、blur、gradient)
  18. 3Dmax对齐轴点到其他对象
  19. Java-Email
  20. 抑郁症自我测试皮肤软件,39健康自测_中国最大的在线健康自测平台

热门文章

  1. Jenkins真正地完整迁移流程(亲测有效)
  2. arthas jvm相关命令使用示例:sysenv、getstatic、vmoption、ognl
  3. 模板方法(钩子函数)设计模式
  4. JVM 调优实战--使用jstack分析线程执行情况
  5. springboot HBase操作工具类
  6. Java集合常见数据结构-栈/队列/数组/链表/红黑树
  7. SQL 新加字段查询窗口报错
  8. C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字
  9. 安卓 Handler使用方法
  10. stm32f302 can通讯_福特福克斯发动机无法启动,诊断电脑还通讯不了怎么修?