CodeForces 800B Volatile Kite(点与直线的距离)(Java 实现)
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 实现)的更多相关文章
- CodeForces 772B Volatile Kite
计算几何,直觉. 凭直觉猜的做法,把每条线段的中点连起来,每个点到对应内部线段的距离,取个最小值. #include <iostream> #include <cstdio> ...
- 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 ...
- 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 ...
- OpenCV计算点到直线的距离 数学法
我们在检测图像的边缘图时,有时需要检测出直线目标,hough变换检测出直线后怎么能更进一步的缩小区域呢?其中,可以根据距离来再做一判断,就涉及到了点与直线的距离问题. 点到直线距离代码如下: //== ...
- POJ1584 判断多边形是否为凸多边形,并判断点到直线的距离
求点到直线的距离: double dis(point p1,point p2){ if(fabs(p1.x-p2.x)<exp)//相等的 { return fabs(p2.x-pe ...
- ArcGIS 点到直线的距离
/****点到直线的距离*** * 过点(x1,y1)和点(x2,y2)的直线方程为:KX -Y + (x2y1 - x1y2)/(x2-x1) = 0 * 设直线斜率为K = (y2-y1)/(x2 ...
- 最后一面挂在volatile关键字上,面试官:重新学学Java吧!
最后一面挂在volatile关键字上,面试官:重新学学Java吧! 为什么会有volatile关键字? volatile: 易变的; 无定性的; 无常性的; 可能急剧波动的; 不稳定的; 易恶化的; ...
- 【codeforces 801D】Volatile Kite
[题目链接]:http://codeforces.com/contest/801/problem/D [题意] 给你一个凸多边形的n个点; 然后允许你将每个点移动到距离不超过D的范围内; 要求无论如何 ...
- codeforces 801 D. Volatile Kite(数学题)
题目链接:http://codeforces.com/contest/801/problem/D 题意:求出一个最大值D,使得一个给定的凸多边形任意点移动范围在半径为D的圆中,都不会构成一个凹都边形. ...
随机推荐
- C++中正确使用PRId64 (转载)
转自:http://blog.csdn.net/win_lin/article/details/7912693 例子参考高性能流媒体服务器SRS:https://github.com/winlinvi ...
- 个人微信号二次开发SDK协议,个人微信号二次开发api接口
通过这个API接口可以做什么? 通过我们提供的API接口您可以开发: 工作手机(如:X创,X码,XX管家等) 微信群讲课软件(如:讲课X师,一起X堂等) 微信社群管理软件(如:小X管家,微X助手等) ...
- Proteus中的 PIC10/12/16 MCUs编译器无法下载的问题
当你打开网站时,点击该软件下载会发现如下页面: google一下会出现这个界面,大意是这个版本的编译器太老了,已经被某些更加高级的编译器给取代了(qaq心痛) 然后我就开始FQ到处google,Sou ...
- 2017西安网络赛B_Coin
样例输入 2 2 1 1 3 1 2 样例输出 500000004 555555560 思路: n重伯努利实验概率分布题. 设q=1-p,p为事件概率. Y为出现偶数次的概率. 所以 Y=1/2*( ...
- 思维题 URAL 1409 Two Gangsters
题目传送门 /* 思维题:注意题目一句话:At some moment it happened so that they shot one and the same can. 如果两个人都有射中的话, ...
- Android 性能优化(15)网络优化( 11)Manipulating Broadcast Receivers On Demand
Manipulating Broadcast Receivers On Demand This lesson teaches you to Toggle and Cascade State Chang ...
- YumRepo Error: All mirror URLs are not using ftp, http[s] or file
有台机器使用Yum的时候,报错如下: YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. $releaseve ...
- 往文件内写入内容(java)
新建个工具类,并标记成静态的,方便调用. package util; import java.io.File;import java.io.FileOutputStream; public class ...
- js操作元素透明度以及浏览器兼容性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Android Studio Activity Intent 闪退崩溃 Toolbar
今天写登录注册页面,点击登录页面的“注册”按钮后软件突然崩溃,直接闪退,因为是新手,只能去网上搜.虽然网上解决方法众多,但也没找到可行的.想起来可以看Logcat,马上重新运行应用,查看崩溃时的日志, ...