HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1001-Apple

来源:互联网 发布:空间网络音乐怎么删除 编辑:程序博客网 时间:2024/05/17 02:41

ACM模版

描述

描述

题解

计算几何 + 大浮点数……很恶心啊……用 java 写会容易些。

给定三个点,然后判断第四点是否在这三个点的外接圆内。

代码

import java.math.BigDecimal;import java.util.Scanner;class Util {    public static BigDecimal calR(Dot a, Dot b) {        return a.x.subtract(b.x).multiply(a.x.subtract(b.x)).add(a.y.subtract(b.y).multiply(a.y.subtract(b.y)));    }}class Dot {    public BigDecimal x, y;    public Dot() {    }    public Dot(BigDecimal x, BigDecimal y) {        this.x = x;        this.y = y;    }}public class Main {    private static Scanner sc;    public static void main(String[] args) {        sc = new Scanner(System.in);        BigDecimal two = new BigDecimal("2.00000");        Dot dot1 = new Dot();        Dot dot2 = new Dot();        Dot dot3 = new Dot();        Dot dot4 = new Dot();        int T = sc.nextInt();        for (int cnt = 1; cnt <= T; cnt++) {            dot1.x = sc.nextBigDecimal();            dot1.y = sc.nextBigDecimal();            dot2.x = sc.nextBigDecimal();            dot2.y = sc.nextBigDecimal();            dot3.x = sc.nextBigDecimal();            dot3.y = sc.nextBigDecimal();            dot4.x = sc.nextBigDecimal();            dot4.y = sc.nextBigDecimal();            BigDecimal a = dot3.x.subtract(dot2.x).multiply(two);            BigDecimal b = dot3.y.subtract(dot2.y).multiply(two);            BigDecimal c = dot3.x.multiply(dot3.x).subtract(dot2.x.multiply(dot2.x)).add(dot3.y.multiply(dot3.y))                    .subtract(dot2.y.multiply(dot2.y));            BigDecimal e = dot2.x.subtract(dot1.x).multiply(two);            BigDecimal f = dot2.y.subtract(dot1.y).multiply(two);            BigDecimal g = dot2.x.multiply(dot2.x).subtract(dot1.x.multiply(dot1.x)).add(dot2.y.multiply(dot2.y))                    .subtract(dot1.y.multiply(dot1.y));            BigDecimal X = g.multiply(b).subtract(c.multiply(f)).divide(e.multiply(b).subtract(a.multiply(f)));            BigDecimal Y = a.multiply(g).subtract(c.multiply(e)).divide(a.multiply(f).subtract(b.multiply(e)));            Dot cir = new Dot(X, Y);            BigDecimal r = Util.calR(cir, dot1);            BigDecimal dis = Util.calR(cir, dot4);            if (dis.compareTo(r) > 0) {                System.out.println("Accepted");            } else {                System.out.println("Rejected");            }        }    }}
阅读全文
0 0
原创粉丝点击