hdu 3011

/*
我的做法是:设边长为r,CE=a,AG=x,正四面体的高为sqrt(6)/3 * r,体积可以求出为sqrt(2)/12 * r*r*r ,那么只要列个方程其中一个的体积等于总体积的一半就可以了,求ABEFHG这部分的体积为两个部


分组成,上面一个小正四面体,和下面一个棱台,棱台体积用公式为1/3 *(s1+s2+sqrt(s1*s2))*h(棱台高),均可以用未知数表示出来,然后在化简得到这样一个
方程:x^2+(r-a)x+r^3/(2a)-2*r^2+a*r=0 这样只要解这个方程就可以了,还要注意的是,求出来的解必须要满足0=< x <=r,否则和无解一样输出Oh, my god!

*/ 


//  Created by Chenhongwei on 2016-04-15 Friday 00:54
//  Copyright (c) 2016 Chenhongwei. All rights reserved.

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <climits>
#include <queue>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <sstream>
#include <algorithm>
#define root 1,n,1
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int inf=1e9;
const int mod=1e9+7;
const int maxn=1e5+100;
typedef long long ll;
typedef unsigned long long ull;
int main()
{
	//ios::sync_with_stdio(false);
    //freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	double r,a,b,c,t;
    double x1,x2;
    while(scanf("%lf%lf",&r,&a)!=EOF)
    {
        t=-1.0;
        b=r-a;
        c=r*r*r/a/2-2*r*r+a*r;
        if(b*b-4*c<0)
        {
            printf("Oh, my god!\n");
            continue;
        }
        x1=(-b+sqrt(b*b-4*c))/2;
        x2=(-b-sqrt(b*b-4*c))/2;
        if(x1>=0&&x1<=r)
            t=x1;
        else if(x2>=0&&x2<=r)
            t=x2;
        if(t>=0&&t<=r)
                printf("%.2lf\n",t);
        else
            printf("Oh, my god!\n");
    }
	return 0;
}


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭