HDU 6026 Apple【高精度问题】

来源:互联网 发布:ubuntu软件中心打不开 编辑:程序博客网 时间:2024/06/05 12:16

题目链接: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 stubint 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");elseSystem.out.println("Rejected");}}}