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();
}
}

最新文章

  1. 在Outlook中查看预览SharePoint文档库的文档
  2. Linux内核分析总结
  3. 转 Linux 性能优化之 IO 子系统
  4. 读取NfcA格式数据
  5. unity下载文件三(http异步下载)
  6. 无向图的最短路径算法JAVA实现
  7. quick cocos 的scheduler 定时器
  8. WEBUS2.0 In Action - 索引操作指南(2)
  9. HDU5778 abs
  10. 使2个div 在一行上显示
  11. SpringMVC 知识整理
  12. 未来已来,腾讯AI计算网络
  13. 卷积神经网络的一些经典网络2(Inception)
  14. 手把手图文教你从Eclipse项目迁移Android Studio
  15. 使用Fabric Node SDK进行Invoke和Query
  16. git更新Activemq在远程github上指定版本的源码步骤
  17. Android 音视频深入 七 学习之路的总结和资料分享
  18. View可以设置tag携带数据
  19. 【JAVA】使用 jedis操作redis——连接、存储数据、切库等
  20. C++中一些类和数据结构的大小的总结

热门文章

  1. [odb-users] query results not being cached?
  2. [Qt Creator 快速入门] 第5章 应用程序主窗口
  3. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 The Heaviest Non-decreasing Subsequence Problem
  4. JS数组、数组和学生对象
  5. C# 相关概念
  6. ASP.NET 之页面重定向和传值
  7. service: no such service mysqld 与MySQL的开启,关闭和重启
  8. Ajax学习笔记之一----------第一个Ajax Demo[转载]
  9. jQuery学习笔记(2)-选择器的使用
  10. ES6 学习笔记 - 变量的解构赋值