HDU 6206 Apple【计算几何+高精度Java】
In the first line of each case, there are eight integers x
, 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.
-2 0 0 -2 2 0 2 -2
-2 0 0 -2 2 0 0 2
-2 0 0 -2 2 0 1 1
Rejected
Rejected
实际上有更简便的方法,直接能用更直接的公式算出圆心 (x0, y0) 和半径的平方 r^2
x0 = ((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0*((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1)));
y0 = ((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2.0*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)));
r^2= (x1-x0)*(x1-x0)+(y1-y0)*(y1-y0);
里面涉及除法,那就用BigDecimal就能解决了,参考http://blog.csdn.net/cillyb/article/details/78012069
import java.math.*;
import java.util.*;
import java.io.*; public class Main{
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
int t=cin.nextInt();
while(t-->)
{
BigDecimal px1, px2, px3, py1, py2, py3, px, py;
px1=cin.nextBigDecimal();
py1=cin.nextBigDecimal();
px2=cin.nextBigDecimal();
py2=cin.nextBigDecimal();
px3=cin.nextBigDecimal();
py3=cin.nextBigDecimal();
px=cin.nextBigDecimal();
py=cin.nextBigDecimal();
BigDecimal a, b, c, d, e, f, px0, py0, r,dis;
a=px1.subtract(px2);
b=py1.subtract(py2);
c=px1.subtract(px3);
d=py1.subtract(py3);
e=px1.multiply(px1).subtract(px2.multiply(px2)).multiply(BigDecimal.valueOf(0.5)).subtract(py2.multiply(py2).subtract(py1.multiply(py1)).multiply(BigDecimal.valueOf(0.5)));
f=px1.multiply(px1).subtract(px3.multiply(px3)).multiply(BigDecimal.valueOf(0.5)).subtract(py3.multiply(py3).subtract(py1.multiply(py1)).multiply(BigDecimal.valueOf(0.5)));
px0=b.multiply(f).subtract(d.multiply(e)).divide(b.multiply(c).subtract(a.multiply(d)),,BigDecimal.ROUND_HALF_UP);
py0=c.multiply(e).subtract(a.multiply(f)).divide(b.multiply(c).subtract(a.multiply(d)),,BigDecimal.ROUND_HALF_UP);
r=px1.subtract(px0).multiply(px1.subtract(px0)).add(py1.subtract(py0).multiply(py1.subtract(py0)));
dis=px.subtract(px0).multiply(px.subtract(px0)).add(py.subtract(py0).multiply(py.subtract(py0)));
if(dis.compareTo(r)==)
System.out.println("Accepted");
else
System.out.println("Rejected"); }
}
}
JAVA高精度
import java.math.BigDecimal;
import java.util.Scanner; public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigDecimal x1, y1, x2, y2, x3, y3, x4, y4;
int _;
_ = sc.nextInt();
while(_-- != )
{
x1 = sc.nextBigDecimal();
y1 = sc.nextBigDecimal();
x2 = sc.nextBigDecimal();
y2 = sc.nextBigDecimal();
x3 = sc.nextBigDecimal();
y3 = sc.nextBigDecimal();
x4 = sc.nextBigDecimal();
y4 = sc.nextBigDecimal();
BigDecimal t;
if(y3.equals(y1))
{
t = y2;
y2 = y3;
y3 = t; t = x2;
x2 = x3;
x3 = t;
}
BigDecimal t1 = (y3.subtract(y1)).multiply(y2.multiply(y2).subtract(y1.multiply(y1)));
BigDecimal t2 = (y3.subtract(y1)).multiply(x2.multiply(x2).subtract(x1.multiply(x1)));
BigDecimal t3 = (y1.subtract(y2)).multiply(y1.multiply(y1).subtract(y3.multiply(y3)));
BigDecimal t4 = (y1.subtract(y2)).multiply(x1.multiply(x1).subtract(x3.multiply(x3)));
BigDecimal t5 = BigDecimal.valueOf().multiply(y1.subtract(y2)).multiply(x3.subtract(x1));
BigDecimal t6 = BigDecimal.valueOf().multiply(y3.subtract(y1)).multiply(x1.subtract(x2));
BigDecimal x0 = (t1.add(t2).subtract(t3).subtract(t4)).divide(t5.subtract(t6)); BigDecimal v1 = y3.multiply(y3);
BigDecimal v2 = y1.multiply(y1);
BigDecimal v3 = BigDecimal.valueOf().multiply(x0).multiply(x3.subtract(x1));
BigDecimal v4 = x1.multiply(x1);
BigDecimal v5 = x3.multiply(x3);
BigDecimal v6 = BigDecimal.valueOf().multiply(y3.subtract(y1));
// System.out.println(v6);
BigDecimal y0 = (v1.subtract(v2).subtract(v3).subtract(v4).add(v5)).divide(v6); BigDecimal z1 = (y0.subtract(y2)).multiply(y0.subtract(y2));
BigDecimal z2 = (x0.subtract(x2)).multiply(x0.subtract(x2));
BigDecimal r = z1.add(z2); BigDecimal tmp1 = (x4.subtract(x0)).multiply(x4.subtract(x0));
BigDecimal tmp2 = (y4.subtract(y0)).multiply(y4.subtract(y0));
BigDecimal dis = tmp1.add(tmp2);
if(dis.compareTo(r) > )
{
System.out.println("Accepted");
}
else
{
System.out.println("Rejected");
} }
}
}
参考emmm
HDU 6206 Apple【计算几何+高精度Java】的更多相关文章
- HDU 6206 Apple (高精确度+JAVA BigDecimal)
Problem Description Apple is Taotao's favourite fruit. In his backyard, there are three apple trees ...
- HDU 6206 Apple ( 高精度 && 计算几何 && 三点构圆求圆心半径 )
题意 : 给出四个点,问你第四个点是否在前三个点构成的圆内,若在圆外输出"Accepted",否则输出"Rejected",题目保证前三个点不在一条直线上. 分 ...
- hdu 6206 : Apple 【计算几何 + 分数类】
题目链接 比赛时C++上__float128都被卡精度,然后扔给队友用Java的BigDecimal过了 算法不多说,求三角形外心可以参考 维基百科 https://zh.wikipedia.org/ ...
- HDU 6206 Apple
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6206 判断给定一点是否在三角形外接圆内. 给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢? 知乎 ...
- Apple严控Java太不人性化
转自:http://www.cdtarena.com/javapx/201307/9115.html Apple为了在系统安全方面得到更好的声誉,对更容易造成系统漏洞的Java进行着严格的控制,并在自 ...
- HDU 4998 Rotate (计算几何)
HDU 4998 Rotate (计算几何) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4998 Description Noting is more ...
- hdu 4643 GSM 计算几何 - 点线关系
/* hdu 4643 GSM 计算几何 - 点线关系 N个城市,任意两个城市之间都有沿他们之间直线的铁路 M个基站 问从城市A到城市B需要切换几次基站 当从基站a切换到基站b时,切换的地点就是ab的 ...
- HDU 4925 Apple Tree(推理)
HDU 4925 Apple Tree 题目链接 题意:给一个m*n矩阵种树,每一个位置能够选择种树或者施肥,假设种上去的位置就不能施肥,假设施肥则能让周围果树产量乘2.问最大收益 思路:推理得到肯定 ...
- hdu 5429 Geometric Progression 高精度浮点数(java版本)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5429 题意:给一段长度不超过100的每个数字(可以是浮点数)的长度不超过1000的序列,问这个序列是否 ...
随机推荐
- JSON语法(3)
JSON语法是JavaScript语法的子集. JSON语法规则 数据在名称/值对中 数据由逗号分割 花括号保存对象 方括号保存数组 JSON名称/值对 JSON数据的书写格式是:名称/值对. 名称/ ...
- [Leetcode] Convert sorted list to binary search tree 将排好的链表转成二叉搜索树
---恢复内容开始--- Given a singly linked list where elements are sorted in ascending order, convert it to ...
- 用HTML5 Canvas做一个画图板
使用HTML5可以非常简单地在canvas上实现画图应用,用支持html5的浏览器便可在下面的区域进行绘画,要看到演示效果,请确保你的浏览器支持HTML5: 功能很简单,原理其实和拖放是类似的,主要是 ...
- poj2814-拨钟问题-C语言-枚举算法
#include <stdio.h> #include <stdlib.h> /* 首先,我们考虑用长度为9的数组表示表盘的状态以及调表的操作,终止的条件是表盘状态数组所有元素 ...
- BZOJ1191:超级英雄(二分图匹配)
[HNOI2006]超级英雄Hero 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1191 Description: 现在电视台有一种节 ...
- DIV + CSS问题收集
div里面有三列数据,怎么让他竖向排列,在css中怎么设置 https://zhidao.baidu.com/question/712007772597664245.html css设置块元素在div ...
- JavaBean定义、JSP中使用以及内省操作
Apache commons 一系列的开源工具室非常值得学习的实现. 一 JavaBean定义 JavaBean是一种可重复使用.且跨平台的软件组件.JavaBean可分为两种:一种是 ...
- 关于CRC循环冗余校验的总结(C#)
1. 实验要求 (1)通过CRC(循环冗余校对)序列的计算,掌握C#语言中类的静态方法与动态方法的区别. (2)Shell与Windows Form 的通信作为扩展提高内容. 2. 实验内容 主要工 ...
- 粉刷匠(bzoj 1296)
Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...
- ILSPY反编译工具下载代替收费的Reflector工具
原文发布时间为:2011-10-10 -- 来源于本人的百度文章 [由搬家工具导入] ILSPY反编译工具下载 http://build.sharpdevelop.net/BuildArtefacts ...