博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 6206 : Apple 【计算几何 + 分数类】
阅读量:6618 次
发布时间:2019-06-25

本文共 2544 字,大约阅读时间需要 8 分钟。

比赛时C++上__float128都被卡精度,然后扔给队友用Java的BigDecimal过了

算法不多说,求三角形外心可以参考 维基百科 

这里用到了分数类。根据算法中涉及到的各处细节可以发现,这道题可以满足条件:①只涉及到有理数运算;②有理数用分数表示时,分子分母均不超过1e(12*3)=1e36级别。故,我们可以把原先用浮点数来表示的数据,改成用分数类表示,具体实现可以见代码。

#include
using namespace std;typedef long long LL;struct frac{ __int128 p,q; frac(){} frac(__int128 _p,__int128 _q) { if(_q<0) _p=-_p,_q=-_q; p=_p,q=_q; } frac operator +(const frac&rhs) { __int128 a,b; b=q*rhs.q; a=p*rhs.q+q*rhs.p; if(b==0) return frac(0,1); __int128 g=__gcd(a,b); a/=g; b/=g; return frac(a,b); } frac operator -(const frac&rhs) { __int128 a,b; b=q*rhs.q; a=p*rhs.q-q*rhs.p; if(b==0) return frac(0,1); __int128 g=__gcd(a,b); a/=g; b/=g; return frac(a,b); } frac operator *(const frac&rhs) { __int128 a,b; b=q*rhs.q; a=p*rhs.p; if(b==0) return frac(0,1); __int128 g=__gcd(a,b); a/=g; b/=g; return frac(a,b); } frac operator /(const frac&rhs) { __int128 a,b; b=q*rhs.p; a=p*rhs.q; if(b==0) return frac(0,1); __int128 g=__gcd(a,b); a/=g; b/=g; return frac(a,b); } bool operator <(const frac&rhs)const { return p*rhs.q
(const frac&rhs)const { return p*rhs.q>rhs.p*q; } bool operator ==(const frac&rhs)const { return !(p*rhs.q
rhs.p*q); }};struct Point{ frac x,y; void read() { LL t1,t2; cin>>t1>>t2; x=frac((__int128)t1,1),y=frac((__int128)t2,1); } Point(){} Point(frac _x,frac _y) { x=_x,y=_y; } Point operator -(const Point& rhs) { return Point(x-rhs.x,y-rhs.y); }};typedef Point Vector;frac Dot(Vector A,Vector B){ return A.x*B.x+A.y*B.y;}Point waixin(Point a,Point b,Point c) { frac a1 = b.x - a.x, b1 = b.y - a.y, c1 = (a1*a1 + b1*b1)/frac(2,1); frac a2 = c.x - a.x, b2 = c.y - a.y, c2 = (a2*a2 + b2*b2)/frac(2,1); frac d = a1*b2 - a2*b1; return Point(a.x + (c1*b2 - c2*b1)/d, a.y + (a1*c2 -a2*c1)/d); } Point p1,p2,p3,c,p;int main(){ int T; scanf("%d",&T); while(T--) { p1.read(); p2.read(); p3.read(); c=waixin(p1,p2,p3); p.read(); if(Dot(p-c,p-c)>Dot(p1-c,p1-c)) puts("Accepted"); else puts("Rejected"); }}

 

转载于:https://www.cnblogs.com/Just--Do--It/p/7553104.html

你可能感兴趣的文章
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>
POJ1611-The Suspects
查看>>
Linux下安装Python-3.3.2【转】
查看>>
LeetCode OJ:Merge Two Sorted Lists(合并两个链表)
查看>>
功能测试
查看>>
【BZOJ 1901】Dynamic Rankings
查看>>
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
asp.net后台进程做定时任务
查看>>
java接口中多继承的问题
查看>>
索引笔记《二》确定需要建立索引的列
查看>>
libjpeg的问题
查看>>
嵌入式 详解udev
查看>>
云安全:这也是需要花大钱去建设的部分
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
《Java并发编程的艺术》一一3.3 顺序一致性
查看>>
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>
EVCache —— Netflix 的分布式内存数据存储
查看>>