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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值