CodeForces 614C Peter and Snow Blower
简单计算几何,只要算出圆心到多边形上的最短距离和最长距离即可
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; const int maxn=+;
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)/;
double s=sqrt(l*(l-a)*(l-b)*(l-c));
return *s/c;
} int main()
{
double Max=-;
double Min=-;
scanf("%d%lf%lf",&n,&a,&b);
Point T;
T.x=a;
T.y=b;
for(int i=; i<n; i++) scanf("%lf%lf",&p[i].x,&p[i].y);
for(int i=; i<n; i++)
{
double MinLen=GetNearestDistance(p[(i+)%n],p[i],T);
if(Min==-) 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+)%n].x-a)*(p[(i+)%n].x-a)+(p[(i+)%n].y-b)*(p[(i+)%n].y-b));
double MaxLen=max(Len1,Len2);
if(Max==-) Max=MaxLen;
else Max=max(Max,MaxLen);
} printf("%lf\n",3.1415926*(Max*Max-Min*Min));
return ;
}
CodeForces 614C Peter and Snow Blower的更多相关文章
- codeforces 613A. Peter and Snow Blower
题目链接 给一个多边形, 一个多边形外的定点, 求这个点距离多边形的最短距离和最长距离. 最长距离肯定是和某个顶点的连线, 而最短距离是和点的连线或是和某条边的连线. 对于一条边上的两个点a, b, ...
- [CodeForces - 614C] C - Peter and Snow Blower
C - Peter and Snow Blower Peter got a new snow blower as a New Year present. Of course, Peter decide ...
- Codeforces Round #339 (Div. 1) A. Peter and Snow Blower 计算几何
A. Peter and Snow Blower 题目连接: http://www.codeforces.com/contest/613/problem/A Description Peter got ...
- codeforce #339(div2)C Peter and Snow Blower
Peter and Snow Blower 题意:有n(3 <= n <= 100 000)个点的一个多边形,这个多边形绕一个顶点转动,问扫过的面积为多少? 思路:开始就认为是一个凸包的问 ...
- A. Peter and Snow Blower 解析(思維、幾何)
Codeforce 613 A. Peter and Snow Blower 解析(思維.幾何) 今天我們來看看CF613A 題目連結 題目 給你一個點\(P\)和\(n\)個點形成的多邊形(照順或逆 ...
- 【14.36%】【codeforces 614C】Peter and Snow Blower
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Codeforces Round #339 Div.2 C - Peter and Snow Blower
Peter got a new snow blower as a New Year present. Of course, Peter decided to try it immediately. A ...
- 【CodeForces 613A】Peter and Snow Blower
题 题意 给出原点(不是(0,0)那个原点)的坐标和一个多边形的顶点坐标,求多边形绕原点转一圈扫过的面积(每个顶点到原点距离保持不变). 分析 多边形到原点的最小距离和最大距离构成的两个圆之间的圆环就 ...
- Peter and Snow Blower CodeForces - 613A (点到线段距离)
大意: 给定多边形, 给定点$P$, 求一个以$P$为圆心的最小的圆环包含整个多边形. #include <iostream> #include <cmath> #define ...
随机推荐
- sqlserver低版本生成插入脚本
--将表数据生成SQL脚本的存储过程 CREATE PROCEDURE dbo.UspOutputData @tablename sysname AS declare @column varchar( ...
- 重写AlertView(用block)
@interface AlertView : UIView @property (nonatomic,copy) void(^block)(UIColor *color); - (id)initWit ...
- Java学习笔记之I/O
package com.chinasofti.javase20160819; import java.io.BufferedReader; import java.io.BufferedWriter; ...
- URL特殊字符需转义
URL特殊字符需转义 1.空格换成加号(+) 2.正斜杠(/)分隔目录和子目录 3.问号(?)分隔URL和查询 4.百分号(%)制定特殊字符 5.#号指定书签 6.&号分隔参数 转义字符的原因 ...
- git 强制覆盖本地文件
git fetch --all git reset --hard origin/master git pull
- shell写多行到文件中
用cat或者echo命令输入多行数据到指定文本 #!/bin/sh ( cat <<EOF start() { echo "start" } EOF ) > Ma ...
- ajax2016/4/15 post与get
post方式,数据放在send()里面作为参数传递 xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); ...
- 给input元素添加float. 去除IE6 下input的空隙
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 把Wordpress集成到zen-cart里方法 各种修改 经典机制
作者: 闻庭牛 | 分类: zen cart插件精解 | 浏览: 4 | 评论: 暂时没有评论 如果你的Zen-cart需要一个Blog来发布一些你的最新动态,可以试试Wordpress,并且用WOZ ...
- Android Studio的使用(九)--设置IDE编码格式
1.打开设置 2.勾选编码格式,在这里可以设置分别设置IDE.Project.File等级别的编码格式. 3.查看.修改各个文件的编码 4.当右击编辑界面时,可以直接设置当前文件的编码