二分
_Rikka_
- v -
展开
-
蓝桥杯 分巧克力(二分)
思路:标准二分题,二分每一次选择的边长X。check(x):对于一块矩形巧克力能分出的边长x正方形数量为(矩形长/x)*(矩形宽/x),如果所有的巧克力能分出>=朋友人数,则此方案可行l=x,否则不可行r=x-1。Code:#include<iostream>#include<map>#include<algorithm>#include<cmath>#include<set>#include<string>#.原创 2021-04-14 09:15:33 · 196 阅读 · 0 评论 -
E. Accidental Victory (思维、二分)
题目思路:首先将数组排个序,容易知道要看一个数能不能成为冠军,其实就是将这个数从小到大不断与比他小于等于的数合并相加如果最终能够合并为一个数则其有成为冠军的机会。在这我们先看看暴力的思路,就是遍历每一个数然后让它与最小的数开始相加直到最终它不能再和后面的数相加(前面所有的总和都比后面的某个数小)或合并为一个数了,O(n^2)这毫无疑问会超时。我们想如何进行优化,其实在这我们可以发现对于两个数a<b,a会一直把前面小的数加完 而b也会把a加的那一部分数再加一次,这就重复进行了操作,这时我们可以先从原创 2021-02-17 22:56:09 · 528 阅读 · 2 评论 -
D - Minimax Problem (二分、状压)
题目思路:首先暴力想一想这道题,把每两组数都模拟一遍取最大值,O(N^2)。然后看有没有什么地方可以改进,会发现这题可以适用于二分,看可以用二分的条件—单调(而本题从某种方面看也是“单调”的,所要求的最大值ans,值越小就越不可能成立,越大则越可能成立),故设立一个范围l=0,r=1e9,二分出答案。check()该怎么弄?如check(a),当存在两个数组lst1,lst2任意第i位元素的两者最大值 --max(lst1[i],lst2[i])>=a,则a是符合条件的,最终的答案>=a,l原创 2021-03-08 19:08:05 · 248 阅读 · 0 评论 -
Aggressive cows POJ - 2456 (二分---最小化最大值)
题目二分距离判断条件就是从一开始每发现一个>=d时放一头牛,如果能全部放完l=mid,否r=mid-1,mid=(l+r+1)/2。 #include<iostream> #include<cmath> #include<iomanip> #include<algorithm> using namespace std; typedef long long ll; const int Max = 1e6 + 5; double lst原创 2021-03-06 16:56:18 · 114 阅读 · 0 评论 -
Cable master POJ - 1064 (二分精度)
题目思路:二分每条绳子的长度,循环100次即可。判断条件:每一段向下取整求最大可以裁剪的数量,如果所有数量大于等于k则满足l=mid,小于则不满足r=mid。使用流输出还需注意cout规定小数精度后是四舍五入的,但printf是只截取前多少位。#include<iostream>#include<cmath>#include<iomanip>using namespace std;typedef long long ll;const int Max = 1原创 2021-03-06 13:35:30 · 98 阅读 · 0 评论 -
C2. Guessing the Greatest (hard version) (二分、思维)
题目对于easy情况的做法是,对每个范围都询问两次第二大值,借用第二大值确定最大值所在范围,然后缩小范围。hard情况的做法是,先询问第二大值所在位置p,然后根据最大值所在其左还是右分情况进行二分,其比easy询问次数少了一半是因为每次问询都使用mid—p(假设最大值在p左边),如果第二大值位置还等于p,说明最大值位于mid—r范围内,使 l=mid,如果第二大值位置不等于p,说明最大值位置不位于mid—r范围内,使 r=mid-1,最大值在p右边的情况也类似。还要注意下不能询问范围为1的区间。Cod原创 2021-02-23 00:04:30 · 325 阅读 · 0 评论 -
D. Max Median (二分、思维)
题目从结果分析,答案必定是数组中的一个值,那么我们将值排个序开始二分。check的话,对于我们将要检查的值mid,将原数组中所有小于mid的值设为-1,大于等于mid的值设为1,对于一段区间看其中位数是否>=mid,只要看变化后该区间的总和,如果>0则其中位数>=mid。用一个前缀和sum记录即可,从k开始遍历(最小长度为k),假设遍历到了 k+3,那么sum[k+3]-sum[0] sum[k+3]-sum[1] … sum[k+3]-sum[3]都可以取用,我们想要使值尽可能原创 2021-02-22 23:49:10 · 445 阅读 · 0 评论