博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1845 : [Cqoi2005] 三角形面积并
阅读量:6147 次
发布时间:2019-06-21

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

求出所有交点后从左往右扫描线,用每段的中位线去截所有三角形,算出长度并后乘以该段长度即可,时间复杂度$O(n^3\log n)$。

 

#include
#include
#include
using namespace std;const int N=310;const double eps=1e-9,inf=2000000;struct P{ double x,y; P(){x=y=0;} P(double _x,double _y){x=_x,y=_y;} P operator+(P v){return P(x+v.x,y+v.y);} P operator-(P v){return P(x-v.x,y-v.y);} P operator*(double v){return P(x*v,y*v);} P operator/(double v){return P(x/v,y/v);} double operator*(P v){return x*v.x+y*v.y;}}tri[N][4],seg[N];inline bool cmp(P a,P b){return a.x
0?1:-1;}inline double cross(P a,P b){return a.x*b.y-a.y*b.x;}inline bool has_intersection(P a,P b,P p,P q){ int d1=sig(cross(b-a,p-a)),d2=sig(cross(b-a,q-a)), d3=sig(cross(q-p,a-p)),d4=sig(cross(q-p,b-p)); return d1*d2<0&&d3*d4<0;}inline P line_intersection(P a,P b,P p,P q){ double U=cross(p-a,q-p),D=cross(b-a,q-p); return a+(b-a)*(U/D);}inline double cal(double x){ P D(x,-inf),U(x,inf); int i,m=0; for(i=0;i
1)sort(seg,seg+m,cmp); double l=-inf,r=-inf,t=0; for(i=0;i
0)t+=r-l,l=seg[i].x; r=max(r,seg[i].y); } return t+r-l;}int main(){ scanf("%d",&n); for(i=0;i

  

转载地址:http://okmya.baihongyu.com/

你可能感兴趣的文章
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>