Note: The point P1 in the picture is the vertex of the parabola.
Each test case contains three intersectant points which shows in the picture, they are given in the order of P1, P2, P3. Each point is described by two floating-point numbers X and Y(0.0<=X,Y<=1000.0).
2 5.000000 5.000000 0.000000 0.000000 10.000000 0.000000 10.000000 10.000000 1.000000 1.000000 14.000000 8.222222
33.33 40.69HintFor float may be not accurate enough, please use double instead of float.分析:简单的求面积问题。代码:#include<stdio.h> #include<math.h> int main() { int n; double x1,y1,x2,y2,x3,y3; double a,b,c,g,h,j; double x,y,z; double s1,s2,sl,st,c1,c2; scanf("%d",&n); while(n--) { sl=0;st=0; g=0;h=0; scanf("%lf %lf",&x1,&y1); scanf("%lf %lf",&x2,&y2); scanf("%lf %lf",&x3,&y3); a=(y2-y1)/((x1-x2)*(x1-x2)); b=-2*a*x1; c=x1*x1*a+y1; g=y2-y3; g=g/(x2-x3); h=y2-g*x2; if(x2<x3) { s1=1*a*x2*x2*x2/3+1*b*x2*x2/2+c*x2; s2=a*x3*x3*x3/3+b*x3*x3/2+c*x3; sl=(s2-s1); c1=g*x2*x2/2+h*x2; c2=g*x3*x3/2+h*x3; st=(c2-c1); printf("%.2lf\n",fabs(st-sl)); sl=0;st=0; } else { s1=1*a*x2*x2*x2/3+1*b*x2*x2/2+c*x2; s2=a*x3*x3*x3/3+b*x3*x3/2+c*x3; sl=s1-s2; c1=g*x2*x2/2+h*x2; c2=g*x3*x3/2+h*x3; st=c1-c2; printf("%.2lf\n",fabs(st-sl)); }
} return 0; }