HDU 1071 The area(几何)
这算是最简单的几何了吧。。。比赛的时候都没敢去做。。。唉,对积分信心不足啊。。各种变量,各种算。。。竟然还是1Y。。
1 #include <stdio.h> 2 #include <string.h> 3 #define eps 0.00000001 4 int main() 5 { 6 double x1,x2,x3,y1,y2,y3,w1,w2,q1,q2,q3,q4; 7 double a,b,k1,ans1,ans2,k2,c,ans; 8 int t; 9 scanf("%d",&t); 10 while(t--) 11 { 12 scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3); 13 w1 = y2 - y1;//讲c约去,解只含有a,b的方程 14 w2 = y3 - y2; 15 q1 = x2*x2 - x1*x1;//w1 = q1*a - q2*b; 16 q2 = x1 - x2;// w2 = q3*a - q4*b; 17 q3 = x3*x3 - x2*x2; 18 q4 = x2 - x3; 19 b = (w1*q3 - w2*q1)/(q1*q4 - q2*q3);//解出b 20 a = (w1 + b*q2)/q1;//表示a 21 c = y3 - a*(x3*x3) - b*x3;//表示c 22 k1 = (y3 - y2)/(x3 - x2);//直线的斜率 23 k2 = y2 - k1*x2;//y = k1*x + k2; 24 ans1 = (a*x3*x3*x3)/3+(b*x3*x3)/2+c*x3-(k1*x3*x3)/2-k2*x3;//积分 25 ans2 = (a*x2*x2*x2)/3+(b*x2*x2)/2+c*x2-(k1*x2*x2)/2-k2*x2; 26 ans = ans1 - ans2; 27 if(ans < 0) 28 ans = -ans; 29 printf("%.2lf\n",ans+eps); 30 } 31 return 0; 32 }