码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1714 RedField

时间:2015-07-24 20:44:00      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

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\n",ans);  
    23.     }  
    24.     return 0;  

hdu 1714 RedField

标签:

原文地址:http://www.cnblogs.com/13224ACMer/p/4674350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!