二分和三分
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
福建工程大学OJ --- 2570 university 【二分 , lower_bound 的运用】
传送门 //对于每一个学生的分数, 找和该分数最近的学校即可. //当然用二分找啊, 然后如果熟练运用了lower_bound 和 upper_bound(下面会详细介绍介绍) , 那么直接上就可以, 否则你就直接手写这两个函数(xx, 博主不是很会手写哎,大概知道一些 )也是可以的. 注意边界条件! 即第0个学校就另成一个极值, 反正就是如果没有符合的, 就选边界.AC Code : (l原创 2017-08-14 14:16:23 · 782 阅读 · 0 评论 -
西北大学校赛B题 北境之都 【三分】
传送门题意: 给定n座房子的高度, 要求任意两座房子的高度差在m以内, 每个房子只能改变一次高度,将一个房子的高度改变k米的花费是k^2万元,求最低要花费多少万元思路: 很明显, 将一个房子的高度放在过高或者过低的都是不最优, 而是中间的某个值, 比如样例就是45, 所以我们可以三分一下最低高度x, 然后x + m作为最高高度, 比x小的变为x, 比x+m 大的变为 x + m, 然后取最优值...原创 2019-03-19 21:35:20 · 321 阅读 · 0 评论 -
POJ 2785 4 Values whose Sum is 0 【折半二分处理的好题】
传送门 // 题意:给定四个数组, 每个数组中有n个数, 然后从每一个数组中恰好挑选出一个数字使得这四个数字加起来等于0的方案数是多少?思路: 最简单办理的方法就是n^3logn查找, 肯定是不行的… 那么我们可以想将这四个数组分成两个数组, 然后问题就等价于从这两个数组中任意选择一个数使得他们加起来等于0的方法数. 即折半. 所以我们先处理前两个数组的所有可能先存下来, 然后再次枚举剩下的两个数原创 2018-03-21 14:18:46 · 226 阅读 · 0 评论 -
三分模板
//三等分三分 //求一个单峰函数的极值. 所以只要函数满足是单峰函数, 则就可以用三分做. 三分求极值/** @Cain*/const db eps = 1e-6;db a,b,c,x,y;db func(db x1){ return a*x1*x1 + b*x1 + c;}db dis(db x1,db y1){ return sqrt((x1-x)...原创 2017-07-22 10:24:26 · 418 阅读 · 0 评论 -
二分模板
poj–3685 传送门ll n,m;int cas=1;ll cal(ll i,ll j){ return i*i + 100000 * i + j*j - 100000 * j + i * j;}int solve(ll k){ ll ans = 0; for(int j=1;j<=n;j++){ ll l = 0, r = ...原创 2017-07-16 22:29:45 · 240 阅读 · 0 评论 -
POJ 3258 River Hopscotch 【二分 + 思维】
传送门 // 题意: 起点为0, 终点问L, 给定n个点, 问移除恰好m个点后要最小的区间长度最大, 问这个区间长度是多少.// 思路: 一般要什么最小的最大啊(或者反过来) 都是二分的思想!!!! 所以我们直接二分答案, 重点说如何check: 先对原序列排序, 对于一个答案ans , 如果一个区间长度小于了ans, 那么就要移除掉该个点. 然后由于这个点可能关联到了下一个区间, 所以我们要专原创 2018-01-12 13:54:01 · 232 阅读 · 0 评论 -
POJ 3273 Monthly Expense 【二分 + 思维】
传送门 // 题意: 给定n个数字, 问分成m份, 其中m份中最大的要最小, 问最小是是多少//思路: 二分. 我们 首先考虑如果我们知道了答案怎么check, 那么我们可以遍历一遍可以知道如果有几份大于了这个ans, 那么这个从这需要断开, 也就是一组, 检查最后分的组数与m的关系就行啦, 注意就是如果有某一个单一的数都已经大于了ans了, 那么这个ans肯定是不行的. O(nlogn)的复杂度原创 2018-01-12 13:44:59 · 284 阅读 · 0 评论 -
HDU - 3586 Information Disturbing 【二分 + 树形dp】
传送门 //题意: 1是总部, 要切断所有叶结点和总部的联系, 每天变有个花费, 要保证总花费在小于m的情况下的最小的limit(每条边的花费要小于limit). //思路: 这个前提看似非常矛盾, 因为加入砍去两条边权为5的比砍去一条边长为6的limit的要更小一点, 但是有可能总和又要超过m,所以要综合考虑到两部分. 那么采用二分答案, 然后check当前这个答案, 如果合适就减小当前的答案原创 2017-10-12 22:27:15 · 383 阅读 · 0 评论 -
CF 782B 和 HDU 4717 经典移点问题 【 二分 和 三分 时间】
CF 782B 传送门/** @Cain*/const int maxn = 1e5+5;const db eps = 1e-7;int a[maxn],b[maxn];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(原创 2017-07-22 14:03:52 · 446 阅读 · 0 评论 -
Codeforces #251 D题 Devu and his Brother 【三分】
传送门题意: 给定一个长度为n的a数组, 和一个长度为m的b数组, 每次可以选任意一个数组的任意一个元素, 让它+ or - 1, 问最少执行多少步,可以使得a数组的最小值 >= b数组的最大值.思路: 很明显, 我们需要找到那个临界值, 并且一定是处于一个中间水平,太大或者太小都不行, 所以可以用三分处理, 然后统计答案就行, 详情看代码实现.AC Codeconst int ma...原创 2019-03-20 01:40:08 · 209 阅读 · 0 评论