CodeForces 800B Volatile Kite(点与直线的距离)(Java 实现)

传送门

如果想要一个凸多边形不退化为凹多边形,那么任意的相邻的三个点必然最多形成一条直线。因此我们可以求出点i-1和i+1的直线向量,再求点i到这条直线的距离,答案必然是取其中最小的一个值

import java.io.*;
import java.util.*; public class Main {
static class Point {
double x,y;
Point(double xx,double yy) {
x=xx;
y=yy;
}
Point(){
x=0;
y=0;
}
Point subtract(final Point b)
{
return new Point(x-b.x,y-b.y);
}
Point add(final Point b)
{
return new Point(x+b.x,y+b.y);
}
double multiply(final Point b)
{
return x*b.y-b.x*y;
}
double dis(final Point b)
{
return Math.sqrt((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y));
}
}
static final int N = 10005;
static final int inf= 0x3f3f3f3f;
static Point a[]=new Point[N];
public static void main(String[] args) throws IOException {
Scanner cin = new Scanner(new InputStreamReader(System.in));
while(cin.hasNext()){
int n=cin.nextInt();
for(int i=0;i<n;i++){
if(a[i]==null) a[i]=new Point();
a[i].x=cin.nextDouble();
a[i].y=cin.nextDouble();
}
for(int i=n;i<2*n;i++){
a[i]=a[i-n];
}
double ans=Double.MAX_VALUE;
for(int i=0; i<n; i++)
{
double tmp=a[i+2].subtract(a[i]).multiply(a[i+1].subtract(a[i]))/2;
if(a[i].dis(a[i+2])==0) continue;
ans=Math.min(ans,tmp/a[i].dis(a[i+2]));
}
System.out.printf("%.7f\n",ans);
}
cin.close();
}
}

CodeForces 800B Volatile Kite(点与直线的距离)(Java 实现)的更多相关文章

  1. CodeForces 772B Volatile Kite

    计算几何,直觉. 凭直觉猜的做法,把每条线段的中点连起来,每个点到对应内部线段的距离,取个最小值. #include <iostream> #include <cstdio> ...

  2. Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) D. Volatile Kite

    地址:http://codeforces.com/contest/801/problem/D 题目: D. Volatile Kite time limit per test 2 seconds me ...

  3. Codeforces801D Volatile Kite 2017-04-19 00:30 122人阅读 评论(0) 收藏

    D. Volatile Kite time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. OpenCV计算点到直线的距离 数学法

    我们在检测图像的边缘图时,有时需要检测出直线目标,hough变换检测出直线后怎么能更进一步的缩小区域呢?其中,可以根据距离来再做一判断,就涉及到了点与直线的距离问题. 点到直线距离代码如下: //== ...

  5. POJ1584 判断多边形是否为凸多边形,并判断点到直线的距离

    求点到直线的距离: double dis(point p1,point p2){   if(fabs(p1.x-p2.x)<exp)//相等的  {    return fabs(p2.x-pe ...

  6. ArcGIS 点到直线的距离

    /****点到直线的距离*** * 过点(x1,y1)和点(x2,y2)的直线方程为:KX -Y + (x2y1 - x1y2)/(x2-x1) = 0 * 设直线斜率为K = (y2-y1)/(x2 ...

  7. 最后一面挂在volatile关键字上,面试官:重新学学Java吧!

    最后一面挂在volatile关键字上,面试官:重新学学Java吧! 为什么会有volatile关键字? volatile: 易变的; 无定性的; 无常性的; 可能急剧波动的; 不稳定的; 易恶化的; ...

  8. 【codeforces 801D】Volatile Kite

    [题目链接]:http://codeforces.com/contest/801/problem/D [题意] 给你一个凸多边形的n个点; 然后允许你将每个点移动到距离不超过D的范围内; 要求无论如何 ...

  9. codeforces 801 D. Volatile Kite(数学题)

    题目链接:http://codeforces.com/contest/801/problem/D 题意:求出一个最大值D,使得一个给定的凸多边形任意点移动范围在半径为D的圆中,都不会构成一个凹都边形. ...

随机推荐

  1. 14. extjs中treepanel属性和方法

    转自:http://www.cnblogs.com/connortang/p/4414907.html 1.Ext.tree.TreePanel 主要配置项: root:树的根节点. rootVisi ...

  2. J20170604-hm

    丸める   四舍五入 文字化け 乱码 わきまえる 弁える 辨别,识相 御構い 张罗,招待,款待 お構いなしに 不加考虑 しおり ブックマーク 书签 スタイルシート 样式表

  3. Cmake编译protobuf

    编译指令,在powershell中执行 :      .\protoc.exe .\ive.proto --cpp_out .      .\protoc.exe .\ive.proto --csha ...

  4. Selct 大全

    添加option $("#ID option").each(function(){ if($(this).val()==111){ $(this).remove(); } }); ...

  5. Poj 1236 Network of Schools (Tarjan)

    题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...

  6. 全面学习ORACLE Scheduler特性(10)管理Chains

    5.2  管理Chains 5.2.1  修改Chains属性 基本上碰到修改CHAIN属性的机率不会太大,因此确实没啥可修改的,对于CHAIN对象来说,能够修改的属性只有两个:evaluation_ ...

  7. Elasticsearch--建议器

    目录 可用的建议器类型 term建议器 term建议器的配置选项 phrase建议器 completion建议器 在考虑性能的情况下,允许用户的拼写错误,以及构建一个自动完成功能 可用的建议器类型 t ...

  8. git add . 的时候报错fatal: Unable to create : …File exists.

    报错内容: $ git add . fatal: Unable to create 'E:/project/qbm_cs/.git/index.lock': File exists. Another ...

  9. Android开发笔记(1)——View

    笔记链接:http://www.cnblogs.com/igoslly/p/6781592.html   一.View基础知识            IDE——Integrated Developme ...

  10. Linux系统调用--getrusage函数详解

    Linux系统调用--getrusage函数详解 功能描述:     获得进程的相关资源信息.如:用户开销时间,系统开销时间,接收的信号量等等;   用法:    #include <sys/t ...