省赛3J题 Fruit Ninja II

来源:互联网 发布:知乎 可怕的事 编辑:程序博客网 时间:2024/05/17 23:16

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);}    }}


原创粉丝点击