2014년 9월 26일 금요일

MOON

AOJ MOON
 
SOL)
2개가 겹치는 부분 S를 작은원에서 빼주면 답이다.
 
2 코사인 법칙, 부채꼴의 넓이, 삼각형의 넓이 공식들을 적절히 이용하면 된다.
 
 
[-] Collapse
#include<cstdio>
#include<cmath>
const double PI = 3.141592;
double calpart(double a, double b, double c) {
    double seta, sector, tri;
    //각도를 구한다.
    seta = (acos((a*a + b*b - c*c) / (2 * a*b)));
    //부체꼴의 넓이를 구한다.
    sector = a*a*seta;
    //삼각형의 넓이를 구한다.
    tri = a*a*sin(2 * seta) / 2;
    return sector - tri;
}
int main(){
    int T; scanf("%d", &T);
    while (T--){
        double a, b, c; scanf("%lf%lf%lf", &a, &b, &c);
        //작은원에서 각 2개의 부분을 빼준다.
        printf("%.3lf\n", a*a*PI - calpart(a, c, b) - calpart(b, c, a));
    }
}

댓글 없음:

댓글 쓰기