第一次拿java过acm的题目~
如果不考虑精度这题就是一道水题,直接求圆心然后判断是否在圆外
当然直接做由于精度会wa,用java的BigDecimal就可以完成了
import java.io.*;
import java.util.*;
import java.math.BigDecimal;
public class Main {
public static double x,y,x1,y1,x2,y2,x3,y3,x4,y4;
public static double a,b,c,d,e,f;
public static void calc() {
BigDecimal x_a = new BigDecimal(Double.valueOf(a));
BigDecimal x_b = new BigDecimal(Double.valueOf(b));
BigDecimal x_d = new BigDecimal(Double.valueOf(d));
BigDecimal x_e = new BigDecimal(Double.valueOf(e));
BigDecimal x_x3 = new BigDecimal(Double.valueOf(x3));
BigDecimal x_y3 = new BigDecimal(Double.valueOf(y3));
BigDecimal x_x2 = new BigDecimal(Double.valueOf(x2));
BigDecimal x_y2 = new BigDecimal(Double.valueOf(y2));
BigDecimal x_x1 = new BigDecimal(Double.valueOf(x1));
BigDecimal x_y1 = new BigDecimal(Double.valueOf(y1));
BigDecimal x_c = (x_x2.multiply(x_x2)).add(x_y2.multiply(x_y2)).subtract(x_x1.multiply(x_x1)).subtract(x_y1.multiply(x_y1));
BigDecimal x_f = (x_x3.multiply(x_x3)).add(x_y3.multiply(x_y3)).subtract(x_x2.multiply(x_x2)).subtract(x_y2.multiply(x_y2));
double ret = 0.0;
x = ((x_b.multiply(x_f).subtract(x_e.multiply(x_c))).divide( (x_b.multiply(x_d).subtract(x_e.multiply(x_a))) )).doubleValue();
y = ((x_d.multiply(x_c).subtract(x_a.multiply(x_f))).divide( (x_b.multiply(x_d).subtract(x_e.multiply(x_a))) )).doubleValue();
//BigDecimal x_x = new BigDecimal(Double.valueOf(x));
//BigDecimal x_y = new BigDecimal(Double.valueOf(y));
BigDecimal x_x = ((x_b.multiply(x_f).subtract(x_e.multiply(x_c))).divide( (x_b.multiply(x_d).subtract(x_e.multiply(x_a))) ));
BigDecimal x_y = ((x_d.multiply(x_c).subtract(x_a.multiply(x_f))).divide( (x_b.multiply(x_d).subtract(x_e.multiply(x_a))) ));
BigDecimal r = ((x_x.subtract(x_x1)).multiply(x_x.subtract(x_x1))).add( (x_y.subtract(x_y1)).multiply(x_y.subtract(x_y1)) );
BigDecimal x_x4 = new BigDecimal(Double.valueOf(x4));
BigDecimal x_y4 = new BigDecimal(Double.valueOf(y4));
//
BigDecimal dis = ((x_x.subtract(x_x4)).multiply(x_x.subtract(x_x4))).add( (x_y.subtract(x_y4)).multiply(x_y.subtract(x_y4)) );
if (r.compareTo(dis) < 0) System.out.println("Accepted");
else System.out.println("Rejected");
}
public static void main(String[] arg) {
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
while (T > 0) {
T--;
x1 = sc.nextDouble();
y1 = sc.nextDouble();
x2 = sc.nextDouble();
y2 = sc.nextDouble();
x3 = sc.nextDouble();
y3 = sc.nextDouble();
x4 = sc.nextDouble();
y4 = sc.nextDouble();
a = 2*(x2-x1);
b = 2*(y2-y1);
d = 2*(x3-x2);
e = 2*(y3-y2);
//c=x2*x2+y2*y2-x1*x1-y1*y1;
//f=x3*x3+y3*y3-x2*x2-y2*y2;
//x = (b*f-e*c) / (b*d-e*a);
//y = (d*c-a*f) / (b*d-e*a);
//x = (b*(x3*x3+y3*y3-x2*x2-y2*y2)-e*(x2*x2+y2*y2-x1*x1-y1*y1)) / (1);
//r = (x-x1)*(x-x1)+(y-y1)*(y-y1);
calc();
}
}
}
(看起来有点凌乱0.0)