hdu 1714 RedField

RedField

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 639    Accepted Submission(s): 213


Problem Description
As the graph you see below, we named the red part "RedField".The read part is the intersection of an ellipse and a triangle.Now, 8600's not good at math, so he wants you to help him calculate the area of the "RedField".
 


Input
The first line of input contains n, the number of test cases. n lines follow.Each test case contains four numbers a, b, x, y(0 < b <= a <= x),and a is the lenth of OA, b is the lenth of OB,and x, y representing the coordinate of the point P.
 


Output
For each test case, output the area of the "RedField",accurate up to 2 decimal places.
 


Sample Input
1 1.00 1.00 2.00 2.00
 


Sample Output
0.39
 


Source
 


Recommend
lcy

非常简单的高数题!
1.先求出交点!
2.再对交点右边的含有抛物线的部分积分,再加上三角形就好了!
有一个要注意的地方:就是y可以为负数,即p可以在x轴的下方。(这里我WA了3次,哎真的没有仔细考虑啊!!)

    1. #include<iostream>  
    2. #include<cstdio>  
    3. #include<cmath>  
    4. using namespace std;  
    5. int main()  
    6. {  
    7.     int n;  
    8.     cin>>n;  
    9.     while(n--)  
    10.     {  
    11.         double A,B,k,j_x,j_y,ans;  
    12.         double p_x,p_y;  
    13.         cin>>A>>B>>p_x>>p_y;  
    14.         p_y = p_y>0?p_y:-p_y;  
    15.         k=p_y/p_x;  
    16.         double tt=(A*A*B*B)/(B*B+A*A*k*k);  
    17.         j_x=sqrt(tt);  
    18.         j_y=k*j_x;  
    19.         double t1=asin(1.0);  
    20.         double t2=asin(j_x/A);  
    21.         ans=A*B*(  ( t1+sin(2*t1)/2.0) -(t2+sin(2*t2)/2.0) )/2+j_x*j_y/2;  
    22.         printf("%.2lf ",ans);  
    23.     }  
    24.     return 0;  
原文地址:https://www.cnblogs.com/13224ACMer/p/4674350.html