1142 三分·三分求極值
阿新 • • 發佈:2018-12-21
題目大意:
在直角座標系中有一條拋物線 和一個點P(x,y),求點P到拋物線的最短距離d。
題解:
三分的典例
我們將最大區間定為[left, right],我們不斷的三分列舉這個區間,直到最小。
首先將區間三分:mid=(left+right)/2; midmid=(mid+right)/2;(並非是嚴格的三等分)。我們比較calc(mid)與 calc(midmid)的值,來判斷接下來的區間逼近過程該向哪個區間逼近。
#include<bits/stdc++.h> #include<cstring> #define ll long long #define INF 1000000007 #define eps 1e-7 using namespace std; int a,b,c,x,y; double cal(double t) { double ans; ans=a*t*t+b*t+c; return ans; } double dis(double tmp) { double t=(tmp-x)*(tmp-x)+(cal(tmp)-y)*(cal(tmp)-y); return t; } int main() { //freopen("input.txt","r",stdin); double l,r,mid,mmid,midvalue,mmidvalue; cin>>a>>b>>c>>x>>y; l=-200.0;r=200.0; while(l+eps<r) { mid=(l+r)/2; mmid=(mid+r)/2; midvalue=dis(mid); mmidvalue=dis(mmid); if(midvalue>=mmidvalue) l=mid; else r=mmid; } double ans=dis(l); ans=sqrt(ans); cout<<fixed<<setprecision(3)<<ans<<endl; return 0; }