• hdu 4033 Regular Polygon 计算几何 二分+余弦定理


    题目链接

    给一个n个顶点的正多边形, 给出多边形内部一个点到n个顶点的距离, 让你求出这个多边形的边长。

    二分边长, 然后用余弦定理求出给出的相邻的两个边之间的夹角, 看所有的加起来是不是2Pi。

    #include <iostream>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <map>
    #include <set>
    #include <string>
    #include <queue>
    #include <stack>
    #include <bitset>
    using namespace std;
    #define pb(x) push_back(x)
    #define ll long long
    #define mk(x, y) make_pair(x, y)
    #define lson l, m, rt<<1
    #define mem(a) memset(a, 0, sizeof(a))
    #define rson m+1, r, rt<<1|1
    #define mem1(a) memset(a, -1, sizeof(a))
    #define mem2(a) memset(a, 0x3f, sizeof(a))
    #define rep(i, n, a) for(int i = a; i<n; i++)
    #define fi first
    #define se second
    typedef pair<int, int> pll;
    const double PI = acos(-1.0);
    const double eps = 1e-8;
    const int mod = 1e9+7;
    const int inf = 1061109567;
    const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
    double a[104];
    int main()
    {
        int t, n;
        cin>>t;
        for(int casee = 1; casee<=t; casee++) {
            printf("Case %d: ", casee);
            cin>>n;
            for(int i = 0; i<n; i++) {
                scanf("%lf", &a[i]);
            }
            double l = -inf, r = inf;
            for(int i = 0; i<n; i++) {
                l = max(l, fabs(a[i]-a[(i+1)%n]));
                r = min(r, a[i]+a[(i+1)%n]);
            }
            int flag = 0;
            while(fabs(r-l)>eps) {
                double mid = (l+r)/2, ans = 0;
                for(int i = 0; i<n; i++) {
                    int tmp = (i+1)%n;
                    ans += acos((a[i]*a[i]+a[tmp]*a[tmp]-mid*mid)/(2*a[i]*a[tmp]));
                }
                if(fabs(ans-2*PI)<eps) {
                    flag = 1;
                    break;
                }
                if(ans>2*PI)
                    r = mid;
                else
                    l = mid;
            }
            if(flag) {
                printf("%.3f
    ", l);
            } else {
                puts("impossible");
            }
        }
        return 0;
    }
  • 相关阅读:
    (组合游戏)SG函数与SG定理详解
    第十六场快乐数学赛
    Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020
    L1-048 矩阵A乘以B (15分)
    华东交通大学2019年ACM 双基 程序设计竞赛 个人题解(A
    第十五次开心场
    L1-020 帅到没朋友 (20分)
    L1-018 大笨钟 (10分)
    Educational Codeforces Round 97 (Rated for Div. 2) (A
    [Python自学] day-6 (编程范式、类、继承)
  • 原文地址:https://www.cnblogs.com/yohaha/p/5250574.html
Copyright © 2020-2023  润新知