Apple
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 806 Accepted Submission(s): 267
In the first line of each case, there are eight integers x1,y1,x2,y2,x3,y3,x,y , as described above.
The absolute values of integers in input are less than or equal to 1,000,000,000,000 .
It is guaranteed that, any three of the four positions do not lie on a straight line.
3 -2 0 0 -2 2 0 2 -2 -2 0 0 -2 2 0 0 2 -2 0 0 -2 2 0 1 1
Accepted Rejected Rejected
在这个题目中找个好几个模板,最后确定为点击打开链接;但是里面的除法对于Java大数来说一个变量是不能除的。
但是这个题目要求的是判断是否在圆的内部,所以干脆直接都乘以G再做比较,避免了精度缺失。
代码如下:
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
BigDecimal A,B,C,G;
BigDecimal x1,x2,x3,y1,y2,y3,x0,y0;
BigDecimal X,Y;
int t;
t=cin.nextInt();
while(t-->0)
{
x1=cin.nextBigDecimal();
y1=cin.nextBigDecimal();
x2=cin.nextBigDecimal();
y2=cin.nextBigDecimal();
x3=cin.nextBigDecimal();
y3=cin.nextBigDecimal();
x0=cin.nextBigDecimal();
y0=cin.nextBigDecimal();
A=x1.multiply(x1).add(y1.multiply(y1));
B=x2.multiply(x2).add(y2.multiply(y2));
C=x3.multiply(x3).add(y3.multiply(y3));
G=BigDecimal.valueOf(1);
G=y3.subtract(y2).multiply(x1).add(y1.subtract(y3).multiply(x2)).add(y2.subtract(y1).multiply(x3));
X=B.subtract(C).multiply(y1).add(C.subtract(A).multiply(y2)).add(A.subtract(B).multiply(y3)).divide(BigDecimal.valueOf(2));
Y=C.subtract(B).multiply(x1).add(A.subtract(C).multiply(x2)).add(B.subtract(A).multiply(x3)).divide(BigDecimal.valueOf(2));
x0=x0.multiply(G);
y0=y0.multiply(G);
x1=x1.multiply(G);
y1=y1.multiply(G);
BigDecimal a=x0.subtract(X).multiply(x0.subtract(X)).add( y0.subtract(Y).multiply(y0.subtract(Y)));
BigDecimal b=x1.subtract(X).multiply(x1.subtract(X)).add( y1.subtract(Y).multiply(y1.subtract(Y)));
if(a.compareTo(b)>0)
System.out.println("Accepted");
else
System.out.println("Rejected");
}
}
}
3128



被折叠的 条评论
为什么被折叠?



