HDU-6206 计算几何+大数
来源:互联网 发布:linux getopt 编辑:程序博客网 时间:2024/06/01 16:31
题目
Apple
题解
这道题就是先给你三个点的坐标,再给你一个点的坐标。问这一个点是否在哪三个点构成的圆外,但是要用大数,这里我用的 java 的 BigDecimal
。
代码
import java.io.PrintWriter;import java.math.BigDecimal;import java.math.BigInteger;import java.math.MathContext;import java.math.RoundingMode;import java.util.Scanner;class point{ BigDecimal x,y;}public class Main { private static Boolean judge(point p, point p1, point p2, point p3){ if(p1.y.compareTo(p2.y) == 0 && p2.y.compareTo(p3.y) == 0){ return false; } BigDecimal m1,m2,mx1,mx2,my1,my2,xc,yc; if(p2.y.compareTo(p1.y) == 0){ m2 = p3.x.subtract(p2.x).divide(p3.y.subtract(p2.y)).multiply(new BigDecimal(-1)); mx2 = p2.x.add(p3.x).divide(new BigDecimal(2)); my2 = p2.y.add(p3.y).divide(new BigDecimal(2)); xc = p2.x.add(p1.x).divide(new BigDecimal(2)); yc = m2.multiply(xc.subtract(mx2)).add(my2); } else if(p3.y.compareTo(p2.y) == 0){ m1 = p2.x.subtract(p1.x).divide(p2.y.subtract(p1.y)).multiply(new BigDecimal(-1)); mx1 = p1.x.add(p2.x).divide(new BigDecimal(2)); my1 = p1.y.add(p2.y).divide(new BigDecimal(2)); xc = p3.x.add(p2.x).divide(new BigDecimal(2)); yc = m1.multiply(xc.subtract(mx1)).add(my1); } else{ m1 = (p2.x.subtract(p1.x)).divide(p2.y.subtract(p1.y)).multiply(new BigDecimal(-1)); m2 = (p3.x.subtract(p2.x)).divide(p3.y.subtract(p2.y)).multiply(new BigDecimal(-1)); mx1 = (p1.x.add(p2.x)).divide(new BigDecimal(2)); mx2 = (p2.x.add(p3.x)).divide(new BigDecimal(2)); my1 = (p1.y.add(p2.y)).divide(new BigDecimal(2)); my2 = (p2.y.add(p3.y)).divide(new BigDecimal(2)); xc = (m1.multiply(mx1).subtract(m2.multiply(mx2)).add(my2).subtract(my1)).divide(m1.subtract(m2)); yc = m1.multiply(xc.subtract(mx1)).add(my1); } BigDecimal dx = p2.x.subtract(xc); BigDecimal dy = p2.y.subtract(yc); BigDecimal rsqr = dx.pow(2).add(dy.pow(2)); dx = p.x.subtract(xc); dy = p.y.subtract(yc); BigDecimal drsqr = dx.pow(2).add(dy.pow(2)); if(drsqr.compareTo(rsqr) <= 0) return true; else return false; } public static void main(String[] args) { int t; Scanner in = new Scanner(System.in); t = in.nextInt(); while (t > 0) { t--; point[] a = new point[4]; for (int i = 0; i <= 3; ++i) { a[i] = new point(); a[i].x = in.nextBigDecimal(); a[i].y = in.nextBigDecimal(); } if(judge(a[3],a[0],a[1],a[2])){ System.out.println("Rejected"); } else{ System.out.println("Accepted"); } } }}
阅读全文
0 0
- HDU-6206 计算几何+大数
- hdu 6206 Apple 计算几何
- hdu 3952 计算几何
- HDU 3694计算几何
- hdu 4195#计算几何
- hdu 4353 计算几何
- hdu 3681 计算几何
- hdu 3629 计算几何
- hdu 3629 计算几何
- hdu 5476 (计算几何)
- hdu 2826 计算几何
- hdu 1007(计算几何)
- hdu 1086 计算几何
- hdu 6158 计算几何
- HDU 3952(计算几何)
- HDU 4033 二分+计算几何
- hdu-2438 计算几何+三分
- HDU 1115 计算几何MB
- (一)github新建仓库
- Android 使用LeakCanary检测安卓中的内存泄漏
- 解决8080端口占用问题
- VS学习笔记一
- 小数取整 四舍五入
- HDU-6206 计算几何+大数
- 润乾v5行式填报 数据校验---小计校验
- HDU1094
- PopupWindow
- bzoj 3111: [Zjoi2013]蚂蚁寻路
- 678. Valid Parenthesis String
- GDB 7.0 中文手册 —— 2. 进入和退出GDB
- makefile和shell脚本
- springmvc基础一