小A终于来到了最后一题。小明翻找自己的背包,发现了很多能够提升自己能力值的药水。小A共发现了n种药水,第i种药水有ai瓶,使用后能使能力值加bi。但相同种类的药水,是不能连续使用的。小A觉得自己至少将能力值提升X(X>=1),才有把握AK这场新生赛。药水的味道并不好,小明想尽量少的使用药水。你能告诉小A,他至少使用多少瓶药水, 才能使自己的能力提升至少X?

输出
如果小A不能使自己的能力提升至少X,输出“-1”;否则输出小A最少使用的药水的数量。
样例输入 Copy
2 1000
10 200
5 1
样例输出 Copy
9
来源/分类
郑州轻工业大学2020级新生赛

//#include <bits/stdc++.h>
//#pragma GCC optimize(2)
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <iostream>
#include <map>
#include <cmath>
#include <set>
#include <time.h>
#include <stdlib.h>
#include <random>#define go(i, l, r) for(ll i = (l), i##end = (ll)(r); i <= i##end; ++i)
#define god(i, r, l) for(ll i = (r), i##end = (ll)(l); i >= i##end; --i)
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug_in  freopen("in.txt","r",stdin)
#define debug_out freopen("out.txt","w",stdout);
#define pb push_back
#define all(x) x.begin(),x.end()
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 bigint;
typedef pair<ll,ll> pii;
const ll inf_int = 1e9+10;
const ll inf_ll = 1e17;void read(int &x){scanf("%d",&x);
}
void read(ll &x){scanf("%lld",&x);
}
template<class H, class... T> void read(H& h, T&... t) {read(h);read(t...);
}void pt(){ cout<<'\n';}
template<class H, class ... T> void pt(H h,T... t){ cout<<" "<<h; pt(t...);}//--------------------------------------------
const int maxn = 1e6 + 10;
ll N,X;
struct node{ll a,b;bool operator <(const node& o) const{return b > o.b;}
}arr[maxn];ll judge(ll mid){ll Left = mid,curx = X;for(int i = 1;i<=N;i++){ll x = arr[i].a, y = arr[i].b;ll most = (mid+1)/2;ll cnt = min({x,most,Left});curx -= cnt * y;Left -= cnt;if(Left == 0) break;}if(Left > 0) return 1;else if(curx <= 0) return 2;else return 0;
}
ll solve(){sort(arr+1,arr+N+1);ll l  = 1,r = 1e18,ans = -1;while(l<=r){ll mid = (l+r)>>1;int res = judge(mid);if(res == 1) r = mid-1;else if(res == 2) r = mid-1,ans = mid;else l = mid+1;}printf("%lld\n",ans);
}
int main() {//    debug_in; debug_out;read(N,X);for(int i = 1;i<=N;i++){ll a,b;read(a,b);arr[i] = {a,b};}solve();return 0;
}
``

2783: 魔法药水【二分】相关推荐

  1. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  2. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  3. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  4. 二分查找模板全面总结

    二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...

  5. [C] [二分] C语言实现快速排序

    为了以防万一有人想不开想手撕快排呢?比如我. 通过快排来理解二分思想 什么是快排? 快排的思想不难,理解好递归很重要. 什么是递归? 递归,就是在运行的过程中调用自己. 构成递归需具备的条件: 子问题 ...

  6. Showstopper [POJ3484] [二分] [思维]

    Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 11 10 1 1 10 11 10 1 4 4 1 1 ...

  7. BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】

    题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...

  8. usaco The Perfect Stall(二分匹配模板)

    其实二分匹配都是很早之前看的不过又忘了现在再看看比第一次好理解多了. /* ID:jinbo wu TASK:stall4 LANG:C++ */ #include<bits/stdc++.h& ...

  9. php二分搜索,php如何实现二分搜索法

    在php中实现二分搜索法的方法:首先,取数组中的一个值作为边界:然后递归搜索直到最后,代码是[if ($ low 本教程的操作环境:windows7系统,PHP 5.6版,DELL G3电脑.此方法适 ...

最新文章

  1. 《基于Node.js实现简易聊天室系列之项目前期工作》
  2. 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)
  3. [pytorch、学习] - 4.2 模型参数的访问、初始化和共享
  4. 聚类算法学习指南(二)
  5. php中的缓,php中的缓存机制解释
  6. os.path vs pathlib
  7. Mac系统下安装webpack,cnpm,vue-cli
  8. 會議管理系統--項目總結
  9. 最适合Java初学者练手的项目【JavaSE项目-图书管理系统】
  10. java软件开发毕业论文_基于java软件毕业论文.doc
  11. 一位老电子工程师的十年职场感悟
  12. 软件开发常用图标网址大全
  13. Process-wide API spying - an ultimate hack 摘要翻译(三)
  14. 教室计算机广播控制,小学智能广播系统(模拟广播)系统解决方案
  15. Data Masking-克隆“真实”的假数据
  16. 继承和多态(Java程序设计)
  17. 模仿蚂蚁森林动画效果
  18. 记红辣椒苹果审核旅程
  19. 火绒自定义规则分享,给你真正的“安全感”
  20. C++【入门】数数小木块(最简AC代码)

热门文章

  1. GreenPlum 数据库启动关闭及数据库状态检查
  2. AI溃败,被Dota2职业战队打蠢!独家专访OpenAI:我们发现一个Bug
  3. html语义化标签是什么,HTML语义化标签探析
  4. GeneXus for SAP的最新动态
  5. 郑州大学计算机新媒体专业介绍,数字媒体专业介绍
  6. Android--›InputFilter详解(用例:只能输入中文, 只能输入数字, 只能输入字母, 最大长度限制等)
  7. java 支付宝回调返回值,支付宝APP支付Java回调具体步骤
  8. 手机html5游戏内存修改,一种防止游戏被内存修改器修改的方法
  9. Java浅拷贝和深拷贝(一文足矣),及String类型的坑。
  10. 游戏盾的原理和功能是什么?