#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<map>
#include<queue>
#include <iostream>
using namespace std;
const int N=1e5+10;
#define mp make_pair
typedef pair<int ,int> PII;
const int INF=1e9;
struct Point{
double x,y;
Point(double x=0,double y=0):x(x),y(y){}
void in(){
scanf("%lf%lf",&x,&y);
}
Point operator - (const Point &b) const {
return Point(x-b.x,y-b.y);
}
double dis() const {
return sqrt(x*x+y*y);
}
};
int sign(const double &x,const double EPS=1e-9){
return x<-EPS?-1:x>EPS;
}
double dot(const Point & a,const Point & b){
return a.x*b.x+a.y*b.y;
}
double det(const Point &a,const Point & b){
return a.x*b.y-a.y*b.x;
}
int n;
double PI=acos(-1);
Point o,p[N];
int main() {
//freopen("aaa","r",stdin);
scanf("%d",&n);
o.in();
double mins=1e100,maxs=0;
for(int i=0;i<n;i++){
p[i].in();
}
p[n]=p[0];
for(int i=0;i<n;i++){
maxs=max(maxs,(p[i]-o).dis());
mins=min(mins,(p[i]-o).dis());
if(sign(dot(o - p[i], p[i+1] - p[i]))>=0 && sign(dot(o - p[i+1], p[i] - p[i+1]))>=0){
double res=fabs(det(p[i+1]-p[i],o-p[i])) / (p[i]-p[i+1]).dis();
mins=min(mins,res);
}
}
printf("%.12lf\n",PI*(maxs*maxs-mins*mins));
return 0;
}
codeforces #339 div1 A 扫雪面积
最新推荐文章于 2020-04-16 09:45:51 发布