从来没有遇到过这样的三分题(毕竟因为是鶸),http://hihocoder.com/contest/hiho40/problem/1,因为是教学题所以没有难度,思路人家都给你了。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <iostream> #include <algorithm> #include <queue> #include <vector> #include <cstdlib> #include <cstdio> #include <string> #include <cstring> #include <ctime> #include <iomanip> #include <cmath> #include <set> #include <stack> #include <cmath> using namespace std; double a = 0,b = 0,c = 0,x = 0,y = 0; inline double f(double x){ return a*x*x+b*x+c; } inline double sqdis(double x1,double y1,double x2,double y2){ return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); } int main(){ cin >> a >> b >> c >> x >> y; double mid = -(b/2/a); double l = 0,r = 0,ll = 0,rr = 0; if (x > mid) { l = mid,r = mid+10000; }else{ l = mid-10000,r = mid; } while (r - l > 0.0001) { ll = l + (r-l)/3; rr = r - (r-l)/3; double lldis = sqdis(ll, f(ll), x, y); double rrdis = sqdis(rr, f(rr), x, y); if (lldis > rrdis) { l = ll; }else{ r = rr; } } double ress = sqdis((l+r)/2, f((l+r)/2), x, y); printf("%.3lf\n",sqrt(ress)); return 0; } |