HDU 6026 Apple【高精度问题】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jane_JXR/article/details/78145336

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6206

题目大意及分析:每组数据四个点,前三个点能组成三角形,判断另外一个点是否在这个三角形外接圆的外部,输出相应的结果。

高精度问题,数据范围比较大,本来想着用浮点数把数据范围缩小,一直WA,尝试用java写了一发。

注意java提交时不能加包名,否则会一直WA。第一次用java写题,虽然过程很坎坷,不过A了还是很开心,纪念一下。

CODE:

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int t;
		Scanner scan= new Scanner(System.in);
		BigDecimal two=new BigDecimal("2.0");
		t=scan.nextInt();
		for(int i=0;i<t;i++)
		{
		BigDecimal x1,y1,x2,y2,x3,y3,px,py;
		x1=scan.nextBigDecimal();
		y1=scan.nextBigDecimal();
		x2=scan.nextBigDecimal();
		y2=scan.nextBigDecimal();
		x3=scan.nextBigDecimal();
		y3=scan.nextBigDecimal();
		px=scan.nextBigDecimal();
		py=scan.nextBigDecimal();
		/*a1=x2-x1,b1=y2-y1,c1=(a1*a1+b1*b1)/2*/
		BigDecimal a1=x2.subtract(x1),b1=y2.subtract(y1);
		BigDecimal c1=(a1.multiply(a1).add(b1.multiply(b1))).divide(two);
		/*a2=x3-x1,b2=y3-y1,c2=(a2*a2+b2*b2)/2*/
		BigDecimal a2=x3.subtract(x1),b2=y3.subtract(y1);
		BigDecimal c2=(a2.multiply(a2).add(b2.multiply(b2))).divide(two);
		/*d=a1*b2-a2*b1*/
		BigDecimal d=a1.multiply(b2).subtract(a2.multiply(b1));
		/*三角形外心(x1+(c1*b2-c2*b1)/d,y1+(a1*c2-a2*c1)/d)*/
		BigDecimal ansx=x1.add((c1.multiply(b2).subtract(c2.multiply(b1))).divide(d));
		BigDecimal ansy=y1.add((a1.multiply(c2).subtract(a2.multiply(c1))).divide(d));
		/*比较p点是否在三角形的外接圆外*/
		BigDecimal dis1=((x1.subtract(ansx)).multiply(x1.subtract(ansx))).add((y1.subtract(ansy)).multiply(y1.subtract(ansy)));
		BigDecimal dis2=((px.subtract(ansx)).multiply(px.subtract(ansx))).add((py.subtract(ansy)).multiply(py.subtract(ansy)));
		//System.out.println(dis1);
		//System.out.println(dis2);
		if(dis1.compareTo(dis2)<0)
            System.out.println("Accepted");
		else
			System.out.println("Rejected");
		}
	}
}


猜你喜欢

转载自blog.csdn.net/Jane_JXR/article/details/78145336