现在的位置: 首页 > 综合 > 正文

省赛3J题 Fruit Ninja II

2013年07月17日 ⁄ 综合 ⁄ 共 788字 ⁄ 字号 评论关闭

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2416

推导过程如下:

首先,题意是求切完西瓜后两半中大的。如果不是对半切,那么:


其中,半椭球体积易算:


而,积分体积推导过程如下:

在多元函数积分学中,三重积分是用于计算任意(三元)函数的体积的,但此次不采用三重积分或简化后的三重积分(二重积分),采用一个一重积分,即在物理中广泛运用的积分简化思想,“元素法”。

首先,令


化简:


带入

同除,整理得:


由椭圆面积公式:

(a不是题目中的a,b也不是题目中的b)

知:

又知:


故:


积分得:


故:


另注意一点,如果h>=b,表示没有切到,故:




题外话:为何这么做?

由积分定义及其理解可知,一个立体的体积是连续的平面片面积之和,也印证了,无穷多个0相加,结果可以是任意值。

原来的那个图丑死了,果断上matlab



综上分析,不难得出以下代码:

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

#define pi acos(-1.0)

int main()
{
    ios::sync_with_stdio(false);
	//freopen("E:\\data1.in","r",stdin);
    //freopen("E:\\out1.txt","w",stdout);
    int t;
    cin>>t;
    for (int i=1; i<=t; ++i)
    {
		double a,b,h;
        cin>>a>>b>>h;
        if (h>=b)
        {
            printf("Case %d: %.3lf\n",i,4.0*pi*a*b*b/3);
        }
        else
		{
			double s = 2.0*pi*a*b*b/3+pi*a*h*(b-h*h/(3*b));
			printf("Case %d: %.3lf\n",i,s);
		}
    }
}

抱歉!评论已关闭.