lower,upper;
//lower(凸包下边界):从左端点一直扫到右端点,
//(至少存在两点)前两个点与新点cross<=0,右转,则popback,
//由于要知道倒数第一、倒数第二个点,所以用数组手写栈,直接能拿到
//upper同理,最后去重端点拼在一起
//再找到最下边的点start,使用(start+i)%size取余操作进行输出
//如果最开始仅有一个或两个点,直接输出:
if(n==1)
{
cout<=2&&
cross(lower[lower.size() - 2],lower[lower.size() - 1],p[i])<=0)
lower.pop_back();
//压入栈
lower.push_back(p[i]);
}
for(int i=n-1;i>=0;i--)//++!=--
{
//弹出
while(upper.size()>=2&&
cross(upper[upper.size() - 2],upper[upper.size() - 1],p[i])<=0)
upper.pop_back();
//压入栈
upper.push_back(p[i]);
}
lower.pop_back();
upper.pop_back();
//拼在一起
vectorres;
for(int i=0;i<=lower.size()-1;i++)
res.push_back(lower[i]);
for(int i=0;i<=upper.size()-1;i++)
res.push_back(upper[i]);
int start=0;
//n为去重后的总点数,res.size()为凸包点数,两者完全不等哈!!!!!!!!!
for(int i=1;ires[i].second||res[start].second==res[i].second&&res[i].first
chenxuanyu: 2025-04-26 15:59:13
212050胡昱: 2021-11-02 23:52:57
212050胡昱: 2021-11-02 23:48:37
212050胡昱: 2021-11-02 23:43:58
CyanFish: 2020-10-12 20:43:49
201882_taohansi: 2020-09-24 15:48:47
201882_taohansi: 2020-09-24 15:47:04