您的位置:首页 > 其它

HDU 2899 Strange fuction(三分模版)

2017-08-27 12:29 429 查看
对于一个x变量满足,二分是满足单调性找到离其最近的值。

而三分就是一个凸函数,满足某个点离结果最近,其他两端结果都是递增

那么对于一个范围left1,right1,可以二分mid1=(left1+right1)/2,mid2=(mid1+right1)/2.

这样如果mid2>=mid1那么显然答案在区间left1,mid2之间(因为mid1的结果比较小)

然后反之一样,下面是模版

#include<cstdio>
#include<cmath>
#include<iostream>
#define eps 1e-6
using namespace std;
double a,b,c,x,y;
double left1,right1,p,mid1,mid2,k1,k2,ans1,ans2;
double X,Y;
double f(double x,double y){
return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x;
}
int main(){
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--){
//cin >> a >> b>>c>> X>>Y;
scanf("%lf",&Y);
left1=0;right1=100; //三分x,有x就有y,那么就有了距离的答案,这个答案满足三分的凸性
while(right1-left1>=eps){
// cout <<left1 <<" "<<right1<< endl;
mid1=(right1+left1)/2;
mid2=(mid1+right1)/2;
ans1=f(mid1,Y);ans2=f(mid2,Y); //
if(ans2>=ans1){//答案在left1与mid2之间
right1=mid2;
}else{
left1=mid1;
}
}
printf("%.4f\n",f(left1,Y));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: