二分的一天~,今天的二分有些不一样,做的多数是求最大中的最小,或最小中的最大,今天的第一道题点击打开链接,比较常规,有一点注意的是要用到倒数的知识,因为原函数的单调性是看不出来的,而要求这个函数的最小值,可以利用倒数,一次求导后就变成在区间上单调的函数了,二分即可,还需要注意的地方就是,在这种数据类型为double的时候,在做乘法和除法的时候常数后面最好加上".0"保持数据类型的统一。今天的第二道题点击打开链接,是求最大距离的最小值,由于输入的数据没有按顺序排列,我们需要先给点数组sort一下,然后判断方法如下
int judge(int mid)
{
int cnt=1;
int m=l[0];
for(int i=1;i<n;i++)
{
if(l[i]-m>=mid)
{
cnt++;
m=l[i];
}
if(cnt>=c)return 1;
}
return 0;
}
比较坑的是用cin的时候就是超时,而用scanf直接AC了(非常的尴尬,TLE之后)scanf的快的优势就体现出来了,看来还得用scanf啊。。。
今天第三道题点击打开链接,就是算最大连续值之和的最小值,由于数组里的数值是已经给定好了的,这里的low和high的取值方法就不一样了
for(int i=0;i<n;i++)
{
cin>>money[i];
if(money[i]>low)low=money[i];
high+=money[i];
}
总的来说这个专题,做的比上一个稍微好一点。明天加油!