题解 yzoj1663: 愤怒的牛(二分) yzoj1662: 曲线(三分)
话说二分和三分的题还没有整理过,就趁这两题来整理下笔记
先讲讲关于二分,对于二分的具体边界长期以来对我来说都是个玄学问题,都是边调边拍改对的。思路大体是确定左边界l,和有边界r,判断满足条件缩小范围。
放个大概的代码
while(l+ep<r){
lm=l+(r-l)/3.0;
rm=r-(r-l)/3.0;
if(clu(lm)>clu(rm)) l=lm;
else r=rm;
}
二分用处很大,一般用在二分答案以及二分查找,一般看到最大的最小或最小的最大都是二分答案或二分查找题,一般来说二分答案题的套路都大体一致。
二分答案:luogu P1182,P2678
二分查找:luogu P1496(离散化+二分查找)
关于三分,大概就是在二分的基础上,对左右区间再进行一次二分,三分查找一般用来确定单峰函数的最值

于二分类似先取中间值
mid=(l+r)>>1
再取mid于Right的中间值
rmid=(mid+r)>>1
通过f(mid)于f(rmid)的值来缩小范围
当然还有另外一种写法
1.先把整个区间的n/3的值lmid←n/3+left。
2.再取右侧区间的中间值rmid←right-n/3,从而把区间分为三个小区间。
3.用f(lmid)的值与f(rmid)的值来缩小范围
double ep=1e-9;
while(l+ep<r){//使用ep来控制精度
lm=l+(r-l)/3.0;
rm=r-(r-l)/3.0;
if(clu(lm)>clu(rm)) l=lm;
else r=rm;
}
这样的时间复杂度是O(lon3n)
回到题目
1.愤怒的牛
题意:将c头牛放入相隔距离不同的n个牛舍中,要求任意两头牛相隔最小距离最大
对于这道题,我们可以二分查找,注意细节即可
#include<bits/stdc++.h>
using namespace std;
int n,l,r,c,a[100010];
int main(){
scanf("%d %d",&n,&c);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
sort(a+1,a+1+n);
l=0,r=a[n];
while(l<=r){
int mid=(l+r)>>1;
int cnt=1;//初始值为1,把第一头牛放到一号牛舍一定最优
int tmp=a[1];
for(int i=1;i<=n;++i){
if(a[i]-tmp>=mid){
cnt++;
tmp=a[i];
}
}
if(cnt<c) r=mid-1;
else l=mid+1;
}
printf("%d",r);
return 0;
}
2.曲线
题意:n个二次函数,第i个二次函数g(x)=aix^2+bix+ci( \(i \epsilon [1, n]\) )(二次函数可能退化为一次函数),f(x)=max(g(x))(n个二次函数中的最大值)
求f(x)在 \(x \epsilon [0, 1000]\) 的最小值,易证f(x)为单峰函数,三分查找即可
#include<bits/stdc++.h>
using namespace std;
int T,n;
double ep=1e-9;//控制精度
double a[10010],b[10010],c[10010];
double clu(double x){
double sum=0;
for(int i=1;i<=n;++i) sum=max(sum,((a[i]*x)+b[i])*x+c[i]);//展开即为g(x)
return sum;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%lf %lf %lf",&a[i],&b[i],&c[i]);
}
double l=0,r=1000,lm=0,rm=0;
while(l+ep<r){
lm=l+(r-l)/3.0;
rm=r-(r-l)/3.0;
if(clu(lm)>clu(rm)) l=lm;
else r=rm;
}
printf("%.4lf\n",clu(l));
}
return 0;
}
题解 yzoj1663: 愤怒的牛(二分) yzoj1662: 曲线(三分)的更多相关文章
- bzoj1734 [Usaco2005 feb]Aggressive cows 愤怒的牛 二分答案
[Usaco2005 feb]Aggressive cows 愤怒的牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 407 Solved: 325[S ...
- BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...
- B1734 [Usaco2005 feb]Aggressive cows 愤怒的牛 二分答案
水题,20分钟AC,最大值最小,一看就是二分答案... 代码: Description Farmer John has built a <= N <= ,) stalls. The sta ...
- 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛
1734: [Usaco2005 feb]Aggressive cows 愤怒的牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 217 Solved: ...
- bzoj 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛
1734: [Usaco2005 feb]Aggressive cows 愤怒的牛 Description Farmer John has built a new long barn, with N ...
- bzoj 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛【二分+贪心】
二分答案,贪心判定 #include<iostream> #include<cstdio> #include<algorithm> using namespace ...
- LOJ P10011 愤怒的牛 题解
每日一题 day36 打卡 Analysis 非常水的二分模板,就直接二分答案,用贪心策略check就好了 #include<iostream> #include<cstdio> ...
- bzoj1734 愤怒的牛
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
- bzoj1734 [Usaco2005 feb]Aggressive cows 愤怒的牛
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
随机推荐
- iDevice取证的一大突破
近日手机取证领域传出令人震撼的消息,知名取证大厂Cellebrite宣称可破解任何版本,任何机型的iDevice,连最新的iPhone X也逃不过. 若真属实,代表着iOS的取证又重现光明.只是不确定 ...
- apache bench的简单使用
ApacheBench是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,可以同时模拟多个并发请求. 需要针对web做压力测试,所以简单学习了一 ...
- LASSO原作者的论文,来读读看
Regression Shrinkage and Selection via the lasso 众所周知,Robert Tibshirani是统计领域的大佬,这篇文章在1996年提出了LASSO,之 ...
- 夯实Java基础(十二)——异常处理
1.异常处理概述 在Java程序执行过程中, 总是会发生不被期望的事件, 阻止程序按照程序员预期正常运行, 这就是Java程序出现的异常. 异常处理是基于面向对象的一种运行错误处理机制,通过对异常问题 ...
- Java 设计模式 – Observer 观察者模式
目录 [隐藏] 1 代码 1.1 观察者接口: 1.2 被观察者: 1.3 观众类 : 1.4 电影类: 1.5 效果如下: 代码 说明都在注释: 观察者接口: package ObserverMod ...
- 【错误】【vscode】输出中文是乱码问题
- Window服务基于Quartz.Net组件实现定时任务调度(二)
前言: 在上一章中,我们通过利用控制台实现定时任务调度,已经大致了解了如何基于Quartz.Net组件实现任务,至少包括三部分:job(作业),trigger(触发器),scheduler(调度器). ...
- linux command line learn - get the absolute path of a file
get the absolute path of a file in linux readlink -f filenme [heshuai@login01 3_Variation_calling]$ ...
- Unity进阶之ET网络游戏开发框架 08-深入登录成功消息
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- h5中div边距去除
style样式里面加上 <style> *{ margin:0 ;//外边距为0 padding:0;//内边距为0 } </style>