[LuoguP1883]函數 三分法
阿新 • • 發佈:2018-10-19
mat 三個點 while pan namespace pri cst abs 一個
三分法的模板,一直提交,一直WA
結果,今天把精度判斷從l-r>=t
改成 fabs(F(l)-F(r))>=t
,過了三個點,再將 \(t\) 改成 \(10^{-7}\) 就 \(AC\) 了。。。
這給我一個十分重要的啟示:精度問題十分重要!!!
#include <iostream> #include <cstdio> #include <cmath> using namespace std; const int MAXN = 10000+5; int a[MAXN],b[MAXN],c[MAXN],n; inline double F(double x) { double ans=a[1]*x*x+b[1]*x+c[1]; for(int i=2; i<=n; i++) ans = max(ans ,a[i]*x*x+b[i]*x+c[i]); return ans; } int main() { int T; cin >> T; while(T--) { cin >> n; for(int i=1; i<=n; i++) cin >> a[i] >> b[i] >> c[i]; double l=0,r=1000,t=1e-7; while(fabs(F(l)-F(r))>t) { double p=(2*l+r)/3,q=(l+2*r)/3; if(F(p) > F(q)) { l=p; } else r=q; } printf("%.4lf\n",F(l)); } return 0; }
[LuoguP1883]函數 三分法