POJ 2208 Pyramids&&HDU 1411 校慶神祕建築(尤拉四面體公式)

畫船聽雨發表於2014-04-22

尤拉四面體公式:

知道這個就可以做了啊。

校慶神祕建築

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1564    Accepted Submission(s): 489


Problem Description
杭州電子科技大學即將迎來50週年的校慶,作為校慶委員會成員的我被上級要求設計一座神祕的建築物來迎合校慶,因此我苦思冥想了一個月,終於設計出了一套方案,這座建築物有點象古老埃及的金字塔,不過這個神祕建築的根基是三角形的而不是矩形的,從數學的專業角度來講,它是四面體。當我打算上交我的設計圖紙的時候發現,我不知道怎麼計算這個神祕建築的體積(我知道這座建築的各邊的尺寸),於是我找來了聰明的你來幫助我解決這個難題。
 

Input
輸入檔案包含6個不超過1000的實數,每個數之間用空格隔開。每個數代表金字塔ABCD的一條稜邊長度,稜邊排序如下:AB,AC,AD,BC,BD,CD。
 

Output
輸出資料應是一個實數,表示金字塔的體積,精確到4位小數。
 

Sample Input
2 2 2 2 2 2
 

Sample Output
0.9428
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-8
#define M 1000100
//#define LL __int64
#define LL long long
#define INF 0x3f3f3f3f
#define PI 3.1415926535898

const int maxn = 5010;
using namespace std;


int main()
{
    double a, b, c, d, e, f;
    while(~scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &e, &f))
    {
        double s1, s2, s3, s4;
        double cnt;
        double p;
        s1 = acos((c*c + b*b - f*f)/(2.0*b*c));
        s2 = acos((a*a + c*c - e*e)/(2.0*a*c));
        s3 = acos((a*a + b*b - d*d)/(2.0*a*b));
        s4 = (s1 + s2 + s3)/2.0;
        cnt = sqrt(sin(s4) * sin(s4-s1) * sin(s4-s2) * sin(s4-s3));
        p = a*b*c*cnt/3.0;
        printf("%.4lf\n",p);
    }
    return 0;
}


相關文章