time limit per test2 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard output

Peter got a new snow blower as a New Year present. Of course, Peter decided to try it immediately. After reading the instructions he realized that it does not work like regular snow blowing machines. In order to make it work, you need to tie it to some point that it does not cover, and then switch it on. As a result it will go along a circle around this point and will remove all the snow from its path.

Formally, we assume that Peter’s machine is a polygon on a plane. Then, after the machine is switched on, it will make a circle around the point to which Peter tied it (this point lies strictly outside the polygon). That is, each of the points lying within or on the border of the polygon will move along the circular trajectory, with the center of the circle at the point to which Peter tied his machine.

Peter decided to tie his car to point P and now he is wondering what is the area of ​​the region that will be cleared from snow. Help him.

Input

The first line of the input contains three integers — the number of vertices of the polygon n (), and coordinates of point P.

Each of the next n lines contains two integers — coordinates of the vertices of the polygon in the clockwise or counterclockwise order. It is guaranteed that no three consecutive vertices lie on a common straight line.

All the numbers in the input are integers that do not exceed 1 000 000 in their absolute value.

Output

Print a single real value number — the area of the region that will be cleared. Your answer will be considered correct if its absolute or relative error does not exceed 10 - 6.

Namely: let’s assume that your answer is a, and the answer of the jury is b. The checker program will consider your answer correct, if .

Examples

input

3 0 0

0 1

-1 2

1 2

output

12.566370614359172464

input

4 1 -1

0 0

1 2

2 0

1 1

output

21.991148575128551812

Note

In the first sample snow will be removed from that area:

【题解】



容易想到最后会形成个圆环(那个P点题目有说不会包括在多边形内);

要求的是这个圆环的面积;

->设p点与多边形上的点的距离最远的是r1,最近的是r2;

要获取r1->肯定是在点上。

要获取r2则可能是在点上也可能是在边上。

如下图,第二种和第三种最近的在点上,第一种则在边上且距离是三角形AB边上的高(海伦公式搞搞);

区别这几种的方法就是判断角A和角B是不是钝角(余弦定理余弦值小于0);

#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#define lson L,m,rt<<1
#define rson m+1,R,rt<<1|1
#define LL long long using namespace std; const int MAXN = 2e5; const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0); int n;
double a[MAXN][2]; void input_LL(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void input_int(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} double sqr(double x)
{
return x*x;
} double dis(int q,int w)
{
return sqrt(sqr(a[q][0]-a[w][0])+sqr(a[q][1]-a[w][1]));
} int main()
{
// freopen("F:\\rush.txt","r",stdin);
scanf("%d%lf%lf",&n,&a[0][0],&a[0][1]);
for (int i = 1;i <= n;i++)
scanf("%lf%lf",&a[i][0],&a[i][1]);
double r1 = dis(1,0),r2 = dis(1,0);
a[n+1][0]=a[1][0];
a[n+1][1] = a[1][1];
for (int i = 1;i <= n;i++)
{
double a = dis(i,0),b = dis(i+1,0),c = dis(i,i+1);
double judge1 = sqr(b)+sqr(c)-sqr(a),judge2 = sqr(a)+sqr(c)-sqr(b);
if (judge1<0 || judge2 <0)
r2 = min(r2,min(a,b));
else
{
double p = (a+b+c)/2;
r2 = min(r2,2*sqrt(p*(p-a)*(p-b)*(p-c))/c);
}
r1 = max(r1,a);
}
printf("%.10lf\n",pi*(sqr(r1)-sqr(r2)));
return 0;
}

最新文章

  1. C# 在腾讯的发展
  2. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询
  3. Word, PPT和Excel的常用技巧(持续更新)
  4. my_mosaic
  5. eclipse 注释模板
  6. C++Primer 第十四章
  7. sqlite3内存不断增加的原因
  8. de4dot命令 v2.0.3.3405
  9. Vue实现选项卡切换
  10. 51Nod 1293 球与切换器 DP分类
  11. TensoFlow实现条件语句
  12. token 防止csrf
  13. Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)
  14. BeanFactory和FactoryBean的区别
  15. Java 运行时字符编码与解码
  16. 【Android】adb connect 手机的两种方式
  17. 新飞电器的BI建设案例
  18. kali安装后的网络设置教程(必需)
  19. 获取当前目录getcwd,设置工作目录chdir,获取目录信息
  20. ipV4&amp;V6的区别

热门文章

  1. Java基础学习总结(28)——Java对各种排序算法的实现
  2. Windows下安装Resin及配置具体解释与公布应用
  3. Swift UIView 层次调整
  4. wepy小程序实现列表分页上拉加载(2)
  5. 手把手教你----MyEclipse中 配置 Tomcat
  6. 使用github pages创建博客
  7. 结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议
  8. 前端css常用的选择小汇
  9. [Angular] Show a loading indicator in Angular using *ngIf/else, the as keyword and the async pipe
  10. 使用perl读取Excel