• 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
    ",ans);
    		}
    		cin.close();
    	}
    }
    
    
  • 相关阅读:
    Redis缓存穿透和雪崩
    Redis主从复制
    Redis发布订阅
    IO多路复用
    Synchronized解读
    日志导致jvm内存溢出相关问题
    tomcat及springboot实现Filter、Servlet、Listener
    MySQL主从复制针对trigger的特殊处理
    二、变量/常量/数据类型
    Ubuntu21.04 / Linux Mint20.2 安装 TradingView分析软件
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/6724442.html
Copyright © 2020-2023  润新知