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的序列,问这个序列是否 ...
随机推荐
- BZOJ1407 [Noi2002]Savage 【扩展欧几里得】
题目链接 BZOJ1407 题解 枚举\(m\)用扩欧判即可 #include<algorithm> #include<iostream> #include<cstrin ...
- Ubuntu下安装LNMP之nginx的安装
Nginx 最初是作为一个 Web 服务器创建的,用于解决 C10k 的问题.作为一个 Web 服务器,它可以以惊人的速度为您的数据服务.但 Nginx 不仅仅是一个 Web 服务器,你还可以将其用作 ...
- Unescape JavaScript's escape() using C#
js里面的 unescape escape 对应C#里面 var unescapedString = Microsoft.JScript.GlobalObject.unescape(yourEscap ...
- 运用yunwei.zip压缩包安装过程:
12 yum install lrzsz -y 13 rz 14 ll 15 unzip -o yunwei.zip 16 unzip yunwei.zip ...
- 用@Component注解代替@Configuration注解,定义bean
package com.timo.entity; import org.springframework.beans.factory.annotation.Value; import org.sprin ...
- Sed basic and practice
定义:Sed 是针对数据流的非交谈式编辑器,它在命令行下输入编辑命令并指定文件,然后可以在屏幕上看到编辑命令的输出结果. 好处:Sed 在缓冲区内默认逐行处理数据,所以源文件不会被更改和破坏. 格式: ...
- bzoj 1412 最小割 网络流
比较明显的最小割建模, 因为我们需要把狼和羊分开. 那么我们连接source和每个羊,流量为inf,代表这条边不能成为最小割中的点,同理连接每个狼和汇,流量为inf,正确性同上,那么对于每个相邻的羊和 ...
- mhn 实际部署记录
新增蜜罐时需要注意,server/collector_v2.py中的DEFAULT_CHANNELS,没有注册这个事件是接收不到新蜜罐的消息的
- LeetCode 2 :Swap Nodes in Pairs
我的代码是这样的: class Solution { public: ListNode *swapPairs(ListNode *head) { ; ; ListNode *listA; ListNo ...
- [Leetcode Week9]Word Break
Word Break 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/word-break/description/ Description Given ...