hdu 6206 apple 点在内接圆外

Posted MeowMeowMeow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 6206 apple 点在内接圆外相关的知识,希望对你有一定的参考价值。

//有时间要整理一下 java难道也需要几何板吗?这不是难为人吗?
 //http://bbs.csdn.net/topics/60323633 

import java.math.BigInteger;
import java.util.Scanner;


public class Main {
    public static void debug(BigInteger[] a) {
        System.out.println(a[0]+" "+a[1]);
    }
    public static BigInteger[] getab(BigInteger[] a,BigInteger[] b) {
        BigInteger[] ab=new BigInteger[2];
        ab[0]=b[0].subtract(a[0]);ab[1]=b[1].subtract(a[1]);
        return ab;
    }// AB=(x2-x1,y2-y1)
    public static BigInteger getamulb(BigInteger[] a,BigInteger[] b){
        BigInteger ans=a[0].multiply(b[0]);
        ans=ans.add(a[1].multiply(b[1]));
        return ans;
    }//AB*AC=(x2-x1)(x3-x1)+(y2-y1)(y3-y1)
    public static BigInteger sgn(BigInteger x) {//sgn(x)=(x<0)?-1:((x==0)?0:1);
        int res=x.compareTo(BigInteger.valueOf(0));
        return BigInteger.valueOf(res);
    }
    public static BigInteger Fxy(BigInteger[] b,BigInteger[] c,BigInteger[] p) {
        BigInteger tmp= (p[0].subtract(b[0])).multiply(c[1].subtract(b[1]));
        return tmp.subtract((p[1].subtract(b[1])).multiply(c[0].subtract(b[0])));
    }//f(x,y)=(x-x2)*(y3-y2)-(y-y2)*(x3-x2),
    
    public static int getmeow(BigInteger[] a,BigInteger[] b,BigInteger[] c,BigInteger[] d,int flag){
        BigInteger[] ab=getab(a,b);
        BigInteger[] ac=getab(a, c);
        BigInteger[] db=getab(d, b);
        BigInteger[] dc=getab(d, c);

        //System.out.println(getamulb(dc, dc));
        //debug(ab);debug(ac);debug(db);debug(dc);
        BigInteger amb=getamulb(a, b),dmb=getamulb(d, b);
        BigInteger amc=getamulb(a, c),dmc=getamulb(d, c);
        BigInteger abac=getamulb(ab, ac),dbdc=getamulb(db, dc);
        BigInteger l=sgn(abac),r=sgn(dbdc);
        //System.out.println("1l: "+l+ " r: "+r);
        
        l=l.multiply(abac.multiply(abac));r=r.multiply(dbdc.multiply(dbdc));

        //System.out.println("2l: "+l+ " r: "+r);

        l=l.multiply(getamulb(db, db));r=r.multiply(getamulb(ab,ab));

        //System.out.println("3l: "+l+ " r: "+r);
        l=l.multiply(getamulb(dc, dc));r=r.multiply(getamulb(ac,ac));
        //flag==1 sgn(AB.AC)*(AB.AC)^2 *|DB|^2 *|DC|^2 > sgn(DB.DC) *(DB.DC)^2 *|AB|^2 *|AC|^2
        //flag==0  -sgn(AB.AC)*(AB.AC)^2 *|DB|^2 *|DC|^2 < sgn(DB.DC) *(DB.DC)^2 *|AB|^2 *|AC|^2
        //System.out.println("4l: "+l+ " r: "+r+ " flag:"+flag);
        if(flag==1) {
            return r.compareTo(l); //l>r
        
        }
        else return (l.add(r)).compareTo(BigInteger.valueOf(0)); //l+r>0
    }
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Scanner cin=new Scanner(System.in);
        BigInteger[][]p=new BigInteger[4][2];
        int t=cin.nextInt();
        for(int cas=0;cas<t;cas++){
            for(int i=0;i<4;i++){
                p[i][0]=cin.nextBigInteger();
                p[i][1]=cin.nextBigInteger();
            }
            BigInteger fa=Fxy(p[1], p[2], p[0]),fb=Fxy(p[1], p[2], p[3]);
            BigInteger flg=sgn(fa.multiply(fb));
            int flag=flg.compareTo(BigInteger.valueOf(0));
            int res=getmeow(p[0],p[1], p[2], p[3], flag);
            System.out.println(res==1? "Accepted":"Rejected");
            
            
            
            
        }

}
}

 

以上是关于hdu 6206 apple 点在内接圆外的主要内容,如果未能解决你的问题,请参考以下文章

HDU 6206 Apple ( 高精度 && 计算几何 && 三点构圆求圆心半径 )

hdu6206 Apple 2017 ACM/ICPC Asia Regional Qingdao Online

poj 6206 Apple

VS2015开发常用快捷键

hdu 1859 最小长方形

UVA 12304 /// 圆的综合题 圆的模板