zoukankan      html  css  js  c++  java
  • LightOj 1118

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1118

    给你两个圆的半径和圆心,求交集的面积;

    就是简单数学题,但是要注意acos得到的都是小于180度的角,所以这里要注意一下,不要求整个角,求一半的大小;这点让我错的惨不忍睹;

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <stack>
    #include <math.h>
    
    using namespace std;
    
    #define met(a, b) memset(a, b, sizeof(a))
    #define N 1053
    #define INF 0x3f3f3f3f
    #define PI 4*atan(1)
    const int MOD = 10000007;
    
    typedef long long LL;
    
    int main()
    {
        int T, t = 1;
        scanf("%d", &T);
        while(T--)
        {
            double r1, r2, x1, x2, y1, y2;
            
            scanf("%lf %lf %lf %lf %lf %lf", &x1, &y1, &r1, &x2, &y2, &r2);
            
            double d = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
            
            if( d >= r1+r2 )///相离或相切
            {
                printf("Case %d: %.6f
    ", t++, 0.0);
                continue;
            }
            if(d <= fabs(r1-r2))///内含;
            {
                printf("Case %d: %.6f
    ", t++, PI*min(r1, r2)*min(r1, r2));
                continue;
            }
    
            double a = acos((r1*r1+r2*r2-d*d)/(2*r1*r2));
            double s = sin(a)*r1*r2;///四边形面积
            double b = acos((r1*r1+d*d-r2*r2)/(2*r1*d));
            double s1 = b * r1 * r1;///r1这边的扇形面积;
            double c = acos((r2*r2+d*d-r1*r1)/(2*r2*d));
            double s2 = c * r2 * r2;///r2这边的扇形面积;
            double ans = s1 + s2 - s;
    
            printf("Case %d: %.7f
    ", t++, ans);
        }
        return 0;
    }
    /*
    Input:
    5
    0 0 1 10 10 1
    0 0 10 0 0 5
    -862 823 894 -667 402 663
    548 518 145 119 828 620
    777 499 712 479 314 967
    
    Output:
    Case 1: 0.0
    Case 2: 78.5398163397
    Case 3: 1139058.0639436883
    Case 4: 56622.85922574766
    Case 5: 1513681.0685423985
    */
    View Code
  • 相关阅读:
    97. Interleaving String
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    94. Binary Tree Inorder Traversal
    odoo many2many字段 指定打开的form视图
    docker sentry 配置文件位置
    postgres 计算时差
    postgres 字符操作补位,字符切割
    postgres判断字符串是否为时间,数字
    odoo fields_view_get
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5768066.html
Copyright © 2011-2022 走看看