timus 1084. Goat in the Garden URAL 解題報告 計算幾何

timus  1084. Goat in the Garden   URAL 解題報告   計算幾何

一個正方形的操場裏面有一個stake,上面有一根繩子拴着一直羊,這個stake在操場的正中間,問羊能吃到的草的面積!
分三種情況討論,繩子組成的圓把正方形套了,或者正方形把圓套了,或者圓被正方形分割了……
本來以爲很難,其實仔細分析下也沒那麼難,自己以爲難是因爲這種好像不好AC,因爲有時候精度卡的太煩人了……
但是這個題貌似double沒那麼坑人,所以想明白之後一下子就AC了
關於圓形被正方形分割的情況,:
///圓形面積減去四塊或者8小塊弓形的面積,弓形的面積是扇形的面積減去三角形的面積,
    ///用到acos,勾股定理而已……  很簡單的初中數學題,但是一直怕卡精度沒敢做……


#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<cstdio>
#include<math.h>
#define EPS 1e-7
using namespace std;
const double pi=acos(-1.0);
double c,r;

double slove()
{///圓形面積減去四塊或者8小塊弓形的面積,弓形的面積是扇形的面積減去三角形的面積,
    ///用到acos,勾股定理而已……  很簡單的初中數學題,但是一直怕卡精度沒敢做……
    return r*r*pi-8*(acos(c/(2*r))/(2*pi)*r*r*pi-sqrt((r*r-pow((c/2),2)))*(c/4));
}
int main()
{
    cin>>c>>r;
    if(c>=2*r)
    {
        printf("%.3f\n",r*r*pi+EPS);
    }else if(c*c<=2*r*r)
        printf("%.3f\n",c*c+EPS);
    else
    {
        printf("%.3f\n",slove()+EPS);

    }
}


timus  1084. Goat in the Garden   URAL 解題報告   計算幾何



發佈了76 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章