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