A : Apple

题意:给出三个点,以及另一个点,求最后一个点是否在三个点的外接圆里面,如果在或者在边界上,输出“Rejected”,否则输出"Accepted"

思路:先求一个外接圆,得到圆心和半径,再判一下,注意精度问题,用JAVA

 1 import java.math.BigDecimal;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5 
 6     public static void main(String[] args) {
 7         Scanner in = new Scanner(System.in);
 8         int t = in.nextInt();
 9         for(int cas = 1; cas <= t; ++cas)
10         {
11             BigDecimal x1 = in.nextBigDecimal();
12             BigDecimal y1 = in.nextBigDecimal();
13             BigDecimal x2 = in.nextBigDecimal();
14             BigDecimal y2 = in.nextBigDecimal();
15             BigDecimal x3 = in.nextBigDecimal();
16             BigDecimal y3 = in.nextBigDecimal();
17             BigDecimal x = in.nextBigDecimal();
18             BigDecimal y = in.nextBigDecimal();
19             //x
20             BigDecimal temp1 = y2.subtract(y1);
21             BigDecimal temp2 = y3.multiply(y3).subtract(y1.multiply(y1)).add(x3.multiply(x3)).subtract(x1.multiply(x1));
22             BigDecimal temp3 = y3.subtract(y1);
23             BigDecimal temp4 = y2.multiply(y2).subtract(y1.multiply(y1)).add(x2.multiply(x2)).subtract(x1.multiply(x1));
24             temp1 = temp1.multiply(temp2);
25             temp3 = temp3.multiply(temp4);
26             BigDecimal x0 = temp1.subtract(temp3);
27             temp1 = x3.subtract(x1).multiply(y2.subtract(y1)).subtract(x2.subtract(x1).multiply(y3.subtract(y1)));
28             temp1 = temp1.multiply(BigDecimal.valueOf(2.0));
29             x0 = x0.divide(temp1);
30             //y
31             temp1 = x2.subtract(x1);
32             temp2 = x3.multiply(x3).subtract(x1.multiply(x1)).add(y3.multiply(y3)).subtract(y1.multiply(y1));
33             temp3 = x3.subtract(y1);
34             temp4 = x2.multiply(x2).subtract(y1.multiply(y1)).add(y2.multiply(y2)).subtract(y1.multiply(y1));
35             temp1 = temp1.multiply(temp2);
36             temp3 = temp3.multiply(temp4);
37             BigDecimal y0 = temp1.subtract(temp3);
38             temp1 = y3.subtract(y1).multiply(y2.subtract(y1)).subtract(y2.subtract(y1).multiply(x3.subtract(x1)));
39             temp1 = temp1.multiply(BigDecimal.valueOf(2.0));
40             y0 = y0.divide(temp1);
41             //r
42             temp1 = x1.subtract(x0);
43             temp2 = y1.subtract(y0);
44             temp1 = temp1.multiply(temp1);
45             temp2 = temp2.multiply(temp2);
46             BigDecimal r = temp1.add(temp2);
47             //dis
48             temp1 = x.subtract(x0);
49             temp2 = y.subtract(y0);
50             temp1 = temp1.multiply(temp1);
51             temp2 = temp2.multiply(temp2);
52             BigDecimal dis = temp1.add(temp2);
53             if(dis.compareTo(r) > 0)
54             {
55                 System.out.println("Accepted");
56             }
57             else
58             {
59                 System.out.println("Rejected");
60             }
61         }
62     }
63 }
64 //3
65 //-2 0 0 -2 2 0 2 -2
66 //-2 0 0 -2 2 0 0 2
67 //-2 0 0 -2 2 0 1 1
View Code

相关文章: