第五届趣味编程大赛——F 苗童大作战之爱洗澡的鳄鱼

童童和苗苗准备邀请小鳄鱼来观看大作战,可是小鳄鱼是出了名的爱洗澡,没有游泳池是请不到小鳄鱼的哟!于是童童和苗苗准备比比谁先请到小鳄鱼,为了公平起见,苗苗和童童画出的泳池底长必须相同。

童童画了一个弧状的游泳池,而苗苗把正六边形的一半用来当作游泳池,可是小鳄鱼觉得洗澡的地方越大越好,那么问题来了,你能告诉小鳄鱼这两个图形的面积吗?

如下图: 

x轴上方是童童画的游泳池,为了好看童童用某二元一次方程 y = ax^2 + c 的一部分画出了这段弧,给你二次函数与 x 轴的交点 Px 的绝对值和二次函数与 y 轴的交点 Py, 你能告诉小鳄鱼x轴上方和x轴下方的图形面积吗?

 

Input

 

输入两个数 Px 和 Py (0 < Px, Py < 10000)

 

Output

 

输出两个数,分别代表 x 轴上方的图形面积和 x 轴下方的图形面积。(保留两位小数)

 

Sample Input

2 4

Sample Output

10.67 5.20

哈哈,大家读完题,一定会发现这tm是个数学题!没错!求抛物线的面积!那么,我们可以把抛物线按照Y轴分成两部分,每一部分又可以分成一个三角形和一个小的弧形,那么我们的任务又变成了求小弧形的面积。这个用到了高中的知识,首先我们可以根据题目给的坐标求出一元二次方程,并且求出过px,py两点的直线的方程。

求面积的方法很简单。抛物线方程减直线方程,得到一个新的函数,将这个函数作为导函数,求出它的原函数。将px点的横坐标值代入即可。

#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
    double px,py;
    while(scanf("%lf %lf",&px,&py)!=EOF)
    {
        double a,c,sx=0.0,sy=0.0;
        sx=px*3*sqrt(px*px-(px*px/4))/2;
        sy+=px*py;
        //printf("**%.2lf**\n",sy);
        c=py;
        a=(-1.0)*(c/(px*px));
        sy+=(a*px*px*px/3+py*px/2)*2;
        printf("%.2lf %.2lf",sy,sx);
    }
    return 0;
}

 

你可能感兴趣的:(比赛)