HDU 6206 青岛网络赛1001 高精度 简单几何
给出的数据1e12规模,常规判点是否在圆范围内肯定要用到半径,求得过程中无法避免溢出,因此用JAVA自带的浮点大数运算,和个ZZ一样比赛中eclipse出现问题,而且太久没写JAVA语法都不清楚变量忘了申请空间/构造,还不知道为什么写不了类/函数,一个一个把运算符改成JAVA大数对象封装的函数,括号看的头疼,太傻了,应该交给IDE正常的队友写的,而且也没什么难度,JAVA大数还不用考虑什么精度,怎么简单怎么来。
import java.io.*; import java.math.*; import java.util.*; import java.util.concurrent.atomic.DoubleAdder; import java.util.zip.ZipEntry; import org.omg.PortableInterceptor.DISCARDING; public class Main { public static BigDecimal dis(BigDecimal ax, BigDecimal ay, BigDecimal bx, BigDecimal by){ BigDecimal res = ((ax.subtract(bx)).multiply(ax.subtract(bx))).add((ay.subtract(by)).multiply(ay.subtract(by))); return res; } public static BigDecimal R(BigDecimal ax, BigDecimal ay, BigDecimal bx, BigDecimal by, BigDecimal cx, BigDecimal cy) { BigDecimal pa = by.subtract(cy); BigDecimal pb = cy.subtract(ay); BigDecimal pc = ay.subtract(by); BigDecimal PA = ax.multiply(pa); BigDecimal PB = bx.multiply(pb); BigDecimal PC = cx.multiply(pc); return PA.add(PB.add(PC)); } public static BigDecimal Ux(BigDecimal ax, BigDecimal ay, BigDecimal bx, BigDecimal by, BigDecimal cx, BigDecimal cy){ BigDecimal pa = by.subtract(cy); BigDecimal pb = cy.subtract(ay); BigDecimal pc = ay.subtract(by); BigDecimal PA = ((ax.multiply(ax)).add((ay.multiply(ay)))).multiply(pa); BigDecimal PB = ((bx.multiply(bx)).add((by.multiply(by)))).multiply(pb); BigDecimal PC = ((cx.multiply(cx)).add((cy.multiply(cy)))).multiply(pc); return PA.add(PB.add(PC)); } public static BigDecimal Uy(BigDecimal ax, BigDecimal ay, BigDecimal bx, BigDecimal by, BigDecimal cx, BigDecimal cy){ BigDecimal pa = cx.subtract(bx); BigDecimal pb = ax.subtract(cx); BigDecimal pc = bx.subtract(ax); BigDecimal PA = ((ax.multiply(ax)).add((ay.multiply(ay)))).multiply(pa); BigDecimal PB = ((bx.multiply(bx)).add((by.multiply(by)))).multiply(pb); BigDecimal PC = ((cx.multiply(cx)).add((cy.multiply(cy)))).multiply(pc); return PA.add(PB.add(PC)); } public static void main(String[] args) { int T; Scanner cin = new Scanner((new BufferedInputStream(System.in))); BigDecimal[] a = new BigDecimal[2]; BigDecimal[] b = new BigDecimal[2]; BigDecimal[] c = new BigDecimal[2]; BigDecimal[] z = new BigDecimal[2]; BigDecimal r = null; BigDecimal x = null; BigDecimal y = null; BigDecimal dd = null; BigDecimal eps = BigDecimal.valueOf(1e-20); T = cin.nextInt(); for(int i = 0; i < T; i++) { a[0] = cin.nextBigDecimal(); a[1] = cin.nextBigDecimal(); b[0] = cin.nextBigDecimal(); b[1] = cin.nextBigDecimal(); c[0] = cin.nextBigDecimal(); c[1] = cin.nextBigDecimal(); z[0] = cin.nextBigDecimal(); z[1] = cin.nextBigDecimal(); BigDecimal D = R(a[0], a[1], b[0], b[1], c[0], c[1]).multiply(BigDecimal.valueOf(2)); x = Ux(a[0], a[1], b[0], b[1], c[0], c[1]).divide(D); y = Uy(a[0], a[1], b[0], b[1], c[0], c[1]).divide(D); //System.out.println(x+" "+y); r = dis(a[0], a[1], x, y); dd = dis(z[0], z[1], x, y); //System.out.println(r+" "+dd); if(dd.subtract(r).compareTo(eps) > 0) System.out.println("Accepted"); else System.out.println("Rejected"); } } }