AcWing 2801. 三角形面积并 [CQOI2005] 扫描线

题目

思路

我的天哪这个题的精度是真要命啊调了一大天一口老血喷出来

思想:扫描线

将三角形每个顶点及各个三角形的交点横坐标存起来 每次计算每一竖条的贡献

每条贡献:(左边界所占长度 + 右边界所占长度)/ 2

重点细节在于找与边界的交点,情况如下:

①完全不在当前这一条里的

②三角形的一条边刚好和左|右边界重合 根据左右以及点(0,1)||(1,2)来讨论 这里每个三角形的三个点前面都按横坐标排好序了

③一般情况,求出三角形与边界的所有交点(2||3个) 3个即△的一个顶点刚好落在边界上,然后排序求出此区间的范围

最后对这些区段合并计入贡献

注意求交点里面判断点是否在Seg上的函数只写Dot就好了!别多写多写精度过不去!还有eps貌似只能1e-8!

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>

using namespace std;
const double eps = 1e-6;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const int MaxN = 105;

int n;
vector<double> G;

struct Poin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值