HDU 2274
三分 求这些二次函数最大值最小
反正三分能求吧
#include <iostream> #include<string.h> #include<stdio.h> #include<algorithm> #include<string> #include<math.h> using namespace std ; #define e 2.7182818284 #define LL __int64 #define MAXN 20010 #define inf 1000000000 struct para { int a,b,c; }pa[MAXN]; int n; double f1(double a) { double m1=-inf; for(int i=1;i<=n;i++) { if(pa[i].a*a*a+pa[i].b*a+pa[i].c>m1) m1=pa[i].a*a*a+pa[i].b*a+pa[i].c; } return m1; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d%d",&pa[i].a,&pa[i].b,&pa[i].c); double ll,rr; ll=0; rr=1000; while(rr-ll>1e-9) { double l,r; l=ll+(rr-ll)/3; r=ll+2*(rr-ll)/3; if(f1(r)>f1(l)) rr=r; else ll=l; } printf("%.4lf ",f1(ll)); } return 0; }
HDU 2289
给你一些量 算出杯子里面水的高度
二分就行
#include <iostream> #include<string.h> #include<stdio.h> #include<algorithm> #include<string> #include<math.h> using namespace std ; #define e 2.7182818284 #define LL __int64 #define MAXN 20010 #define inf 1000000000 double pi = 4*atan(1.0); double r,R,h,v; double f(double a) { double r1=(R-r)*a/h+r; return a*pi*(r*r+r*r1+r1*r1)/3; } int main() { int t; scanf("%d",&t); while(t--) { double l1,r1; scanf("%lf%lf%lf%lf",&r,&R,&h,&v); l1=0; r1=h; while(r1-l1>1e-9) { double mid=(l1+r1)/2; // printf("%lf %lf ",L,R); if(f(mid)>v) r1=mid; else l1=mid; } printf("%.6lf ",l1); } return 0; }