hihocoder 1142 三分·三分求極值
阿新 • • 發佈:2019-02-20
三分去逼近一個凹/凸函式,很好的思想!這題要注意的是,迴圈終止的條件是,取的這兩個點足夠近(不是x座標足夠近)。
#include <iostream> #include <cstring> #include <cstdio> #include <queue> #include <algorithm> #include <stdlib.h> #include <math.h> #include <stack> using namespace std; const double eps = 1e-4; double a,b,c,x,y; double dist(double x1,double y1,double x2,double y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } double getY(double xx){ return a*xx*xx+b*xx+c; } double calc(double xx){ double yy = a*xx*xx+b*xx+c; return dist(xx,yy,x,y); } int main(){ while(cin>>a>>b>>c>>x>>y){ double l=-10000; double r= 10000; double lres,rres; while(dist(l,getY(l),r,getY(r))>eps){ double d=(r-l)/3; double lmid=l+d; double rmid=r-d; lres=calc(lmid); rres=calc(rmid); if(lres<rres){ r=rmid; }else{ l=lmid; } } double ans=calc((l+r)/2); printf("%.3f\n",ans); } return 0; }