• CodeForces 614C Peter and Snow Blower


    简单计算几何,只要算出圆心到多边形上的最短距离和最长距离即可

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int maxn=100000+10;
    struct Point
    {
        double x,y;
    } p[maxn];
    double a,b;
    int n;
    
    double GetPointDistance(Point p1, Point p2)
    {
        return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
    }
    
    double GetNearestDistance(Point PA, Point PB, Point P3)
    {
        double a,b,c;
        a=GetPointDistance(PB,P3);
        if(a<=0.00001) return 0.0f;
        b=GetPointDistance(PA,P3);
        if(b<=0.00001) return 0.0f;
        c=GetPointDistance(PA,PB);
        if(c<=0.00001) return a;
        if(a*a>=b*b+c*c) return b;
        if(b*b>=a*a+c*c) return a;
        double l=(a+b+c)/2;
        double s=sqrt(l*(l-a)*(l-b)*(l-c));
        return 2*s/c;
    }
    
    int main()
    {
        double Max=-1;
        double Min=-1;
        scanf("%d%lf%lf",&n,&a,&b);
        Point T;
        T.x=a;
        T.y=b;
        for(int i=0; i<n; i++) scanf("%lf%lf",&p[i].x,&p[i].y);
        for(int i=0; i<n; i++)
        {
            double MinLen=GetNearestDistance(p[(i+1)%n],p[i],T);
            if(Min==-1) Min=MinLen;
            else Min=min(Min,MinLen);
    
            double Len1=sqrt((p[i].x-a)*(p[i].x-a)+(p[i].y-b)*(p[i].y-b));
            double Len2=sqrt((p[(i+1)%n].x-a)*(p[(i+1)%n].x-a)+(p[(i+1)%n].y-b)*(p[(i+1)%n].y-b));
            double MaxLen=max(Len1,Len2);
            if(Max==-1) Max=MaxLen;
            else Max=max(Max,MaxLen);
        }
    
        printf("%lf
    ",3.1415926*(Max*Max-Min*Min));
        return 0;
    }
  • 相关阅读:
    windows 下读取文件夹下所有文件的文件名
    centos7安装python3
    python 实现google 在线中英文翻译
    删除docker /var/lib/docker报Device or resource busy问题处理
    java list 去重
    OpenStack与KVM的区别与联系
    虚拟化kvm virsh 常用命令
    linux 监控服务器流量
    openstack 全套学习资料地址
    二、Openstack入坑指南
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5141842.html
Copyright © 2020-2023  润新知