
二分
mvpmvpokhddbuydg
这个作者很懒,什么都没留下…
展开
-
Cable master题解
#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int n,k;double line[10055];int cou(double num){(计算可以分割成的电缆数) int tot=0,i; for(i=1;i<=n;i++) tot+=line[i]/num; return tot;}int main(){ scanf("%d%d",&原创 2022-04-25 10:58:47 · 262 阅读 · 0 评论 -
Aggressive cows题解
#include<cstdio>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;int n,c;ll stall[100100];bool check(ll k){ int i; ll num=1,t=stall[1]; for(i=2;i<=n;i++)(不停地尝试,只要能放下这么多头牛,则返回True) if(stall[i]-t>原创 2022-04-25 10:58:05 · 156 阅读 · 0 评论 -
Best Cow Fences题解
#include<cstdio>#include<algorithm>using namespace std;int n,f;double num[100500],temp[100500];void ready(double k){(先减去平均值,然后求前缀和,这样的话可以将其和表达出来,后面的话可以减去得到区间和,减去平均值是为了后面操作方便,实际上也可以后面减去) int i; for(i=1;i<=n;i++){ num[i]-=k; num[i]+原创 2022-04-25 10:57:18 · 136 阅读 · 0 评论 -
Max Median题解
开始的解题思路:1.直接对区间进行二分(这个肯定不行,因为区间不单调且k不固定,这样的话,每找一次就要再排序一次,又要恢复状态,必然超时)2.二分查找中点值(本题的话left、right和mid必然为整数,这就减少了不少麻烦)障碍:什么是二分条件(用什么判断该中点值是小了还是大了)C题用过前缀和,所以的话现在我也想的是能不能用前缀和,上一题是如果找到一段区间和大于等于0,那么就说明当前的平均值依然有扩大的可能。但是这题的话找的是中位数,判断一个中位数在一段区间内是否存在,可以在一开始输入时利用桶排,原创 2022-04-25 10:56:27 · 246 阅读 · 0 评论 -
P1083 [NOIP2012 提高组] 借教室题解
思路:1.总结一下,这题的二分不好找,最后的出来了是二分订单数量,在此总结:能否二分,有一个界定标准:状态的决策过程或者序列是否满足单调性或者可以局部舍弃性,而这题不难看出,当前订单满足则前面的订单也必然满足。2. 差分:(其实就是两两之差)一维数组差分我们给定一个数组a[2,4 ,6 ,8 ,10],则它的差分数组b[2,2,2,2,2,2]假设我们让数组区间[2,4]元素都增加1则数组a[2,5,7,9,10]差分数组b[2,3,2,2,1]我们可以发现规律,对于差分数组b,对于任意区原创 2022-04-25 10:54:24 · 187 阅读 · 0 评论 -
Arithmetic Progression 题解(随机数使用)
思路:本题的意思:求首项与公差。第一部分:观察一下,题目的第二类操作(比某数大,有单调性)明显是要我们用二分(或者我觉得其实随机数也行,根据随机数来不断缩小范围,但是这题练二分)求最大值,大概要操作Log2 1e9= 29.897353约30次。float f1=3e2;//3*(10^2);f1结果为300;float f1 =3e-2;//3*(0.1^2);f2结果为0.03;第二部分:求公差,由于一开始已经有n,有了公差和最大值就有了首项,这时就要用到第一个操作。对于任意三个数,我们原创 2022-04-25 10:51:53 · 294 阅读 · 0 评论