【洛谷P2742】【模板】二维凸包/[USACO5.1]圈奶牛【凸包】

20191010 专题:凸包 总览: 整一计算几何 …(:逃 思路就是先按左下到右上排序,再分成上凸包和下凸包,用比较斜率判断是否加入栈 好讲解: (https://www.luogu.org/blog/Sagittarius/tu-bao-xue-xi-bi-ji-p2742-mu-ban-er-wei-tu-bao-usaco51-juan-nai-niu) 凸包是啥?就是给你一堆点,然后用一根有弹性的橡皮筋包住所有的点,... 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P2742
求二维平面上的凸包。


思路:

二维凸包模板题。在这里就不讲述凸包的概念和做法了。需要的话可以看本题题解。
采用的是 G r a h a m Graham Graham算法,时间复杂度 O ( n   l o g n ) O(n\ logn) O(n logn)。


代码:

#include <cstdio>
#include <stack>
#include <cmath>
#include <algorithm>
using namespace std;

const int N=100010;
int n,t=1;
double ans;

struct node  //记录平面上的点的坐标
{
    double x,y;
}a[N];
stack<node> s;   //栈

double cal(double x1,double y1,double x2,double y2)  //求距离
{
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

double angle(node x,node y,node z)
//求x,y在以z为原点平面直角坐标系中的叉积
{
    return (x.x-z.x)*(y.y-z.y)-(y.x-z.x)*(x.y-z.y);
}

bool cmp(node x,node y)  //按照极角排序
{
    double m=angle(x,y,a[1]); 
    if (m>0.0||(m==0.0&&cal(a[1].x,a[1].y,x.x,x.y)<cal(a[1].x,a[1].y,y.x,y.y)))
        return 1;
    return 0;
}

int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%lf%lf",&a[i].x,&a[i].y);
        if (a[i].x<a[t].x||(a[i].x==a[t].x&&a[i].y<a[t].y)) t=i;              
        //记录y坐标最小的点(有多个就x尽量小)
    }
    swap(a[1],a[t]);
    sort(a+2,a+1+n,cmp);
    s.push(a[1]);
    s.push(a[2]);
    s.push(a[3]);  //前三个点入栈
    for (int i=4;i<=n;i++)
    {
        while (1)
        {
            node top=s.top();  //栈顶元素
            s.pop();
            if (angle(top,a[i],s.top())>0)  //求叉积,判断哪个点更优
            {
                s.push(top);  //出栈不会更优就入栈
                break;
            }
        }
        s.push(a[i]);
    }
    s.push(a[1]);
    while (s.size()>1)  //依次弹出栈中的点
    {
        node top=s.top();
        s.pop();
        ans+=cal(top.x,top.y,s.top().x,s.top().y);  //求这一条边的距离
    }
    printf("%.2lf\n",ans);
    return 0;
}
基于轻量级神经网络MobileNet V2的水果识别种类算法研究 本文阐述了一种基于轻量级卷积神经网络MobileNet V2的水果分类与识别算法研究。为了最大限度地促进机械收获,需要一个检测系统,它可以让我们识别不同类别的水果。一个相对未开发的想法是使用深度学习和人工智能算法,不仅可以检测水果的种类,还可以检测水果是否成熟。这可以证明是有利可图的,因为它可以提供作物生长状况以及成熟和未成熟果实的个体数量,以及决定是否是收获时间的有用信息。第一步对数据进行了预处理,数据预处理技术在众多的深度学习计算中起到了重要作用。 阅读详情

相关推荐

Proteus+汇编+8086电子时钟实战:从框架搭建到中断驱动的核心实现

本文详细介绍了使用Proteus仿真软件和8086汇编语言实现电子时钟的完整过程。从程序框架搭建、内存分段模型理解,到核心的8259中断控制器配置与编程,再到中断服务程序编写和数码管动态扫描显示驱动,系统阐述了底层软硬件协同开发的核心原理与实战步骤。该项目是深入理解计算机中断机制和汇编语言编程的绝佳实践。

weixin_29189381的博客 413

[洛谷2742]凸包模板

洛谷2742 凸包模板 Code: #include&lt;bits/stdc++.h&gt; #define db double using namespace std; inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-f;ch=getchar();} while...

romiqi 470

从半导体物理到实战:手把手教你测量MOS管体二极管的Vf和Trr

本文深入探讨了MOSFET体二极管的关键参数测量方法,重点讲解了正向压降(Vf)和反向恢复时间(Trr)的测量原理与实战步骤。通过搭建测试平台,使用万用表和示波器等工具,手把手指导如何量化这些影响开关损耗和效率的核心参数,并对比分析了硅基与碳化硅(SiC)器件在体二极管性能上的显著差异。

n7o8p的博客 341

洛谷P2742 圈奶牛Fencing the Cows(凸包模板)

题目链接 https://www.luogu.org/problem/P2742 代码 #include <bits/stdc++.h> #define ll long long using namespace std; const ll maxn=1e4+10; int inf=1e9; void read(int &x){ int f=1;x=0;char ...

Megurine_Luka_的博客 415

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 948

别再手动挂载NPU了!手把手教你用Ascend-Docker-Runtime一键启动昇腾AI容器

本文详细介绍了如何使用Ascend-Docker-Runtime一键启动昇腾AI容器,大幅简化NPU设备挂载流程。通过环境变量ASCEND_VISIBLE_DEVICES,开发者可以灵活指定NPU设备,提升开发效率。文章还提供了安装配置指南、高级使用技巧和常见问题排查方法,帮助开发者快速掌握这一高效工具。

weixin_42662605的博客 252

洛谷题目:P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包 题解 (本题较难)

洛谷题目:P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包 题解 (本题较难)

C++老手 2284

一文掌握SourceTree使用(超级详细)

SourceTree是一款开源的代码仓库客户端工具,界面美观,操作简单,具有代码克隆、本地创建、提交代码、撤销修改,拉取(pull)代码、上传(push)代码、合并分支等操作。对于软件开发人员是一款必备的应用软件。

GM_115的博客 3万+

【模板】二维凸包 / [USACO5.1] 圈奶牛Fencing the Cows(洛谷P2742)

时间复杂度:排序耗时,遍历过程每个点最多进栈出栈一次,耗时。总复杂度为,完全能够通过的数据。空间复杂度:需要额外的数组存储排序后的点和栈,复杂度为。这道题是计算几何的入门必做题,掌握了Andrew算法,就掌握了解决凸包问题的金钥匙。编写时注意浮点数运算的精度以及共线情况的处理即可。

布心老混子 所有代码均老混子本人远古手搓 易错点均为学生真实场景 博客文章部分借助ai生成 640

机器学习实战——疫情数据分析与预测

机器学习如何做到疫情可视化——疫情数据分析与预测实战 本文将带领大家爬取11个国家以及中国31个省(自治区、直辖市)在2022.0101-2022.06.19的新冠疫情数据。并且采用机器学习模型对2022.6.20-2022.6.30每一天的全国确诊人数、死亡人数、治愈人数进行预测,**做出疫情可视化图形并且求出最终的相关系数R2!...

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 10万+

CAPL学习之路-关键字

在capl中,关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称 声明数据类型的关键字 可以用不同的关键字,声明或引用不同类型的数据 byte 声明一个字节的变量 word 声明两个字节的变量 dword 声明四个字节的变量 int 声明两个字节的整数 long 声明四个字节的变量 qword 声明八个字节的变量 char 声明一个字符串 float 声明一个浮点数,8个字节 double 声明一个浮点数,8个字节 定义一个结构体或枚举类型 struct struct Data { .

jasonj333 6108

洛谷P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows 计算凸包

https://www.luogu.org/problem/P2742 题目描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。 输入格式 输入数据的第一行包括一个整数 N。N(0 <= N <= 10,000)表示农夫约翰想要围住的放牧点的数目。接下来 N 行,...

xiji333的博客 358

【React】1、React入门与概览(JSX语法)

React入门 文章目录React入门一、React全家桶1. React是什么?2. 谁开发的?3. 为什么要学?4. React的特点5. 学习React之前要掌握的JavaScript基础知识二、React 概览组件JSXVirtual DOM关于虚拟DOM:Data Flow三、React基本使用相关js库四、React JSXJSX 语法规则五、模块与组件、模块化与组件化的理解5.1 模块5.2 组件5.4 模块化5.5 组件化 一、React全家桶 React基础 React-Router(R

Coding and studying 1379

洛谷 P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

..分析:代码: 分析: 求二维凸包既可 距离通过勾股定理求直线距离既可 代码: // luogu-judger-enable-o2 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;cstring&gt; #include&lt;cstdlib&gt; #include&lt;...

qq_35786326的博客 282

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

洛谷P2742 圈奶牛 (凸包 Andrew算法)

upd: 新增一组 hack 数据。

m0_53387935的博客 939

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

P4859 已经没有什么好害怕的了(二项式反演)、P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包、P1452 【模板】旋转卡壳 | [USACO03FAL

在构建过程中,通过叉积的判断来决定是否将当前点加入凸包顶点数组。在循环中,根据叉积的大小来决定是否将当前点加入凸包。:用于计算三个点形成的向量的叉积。通过叉积的正负可以判断三个点的相对位置关系。函数用于计算三个点形成的向量的叉积,通过叉积的正负来判断点的相对位置关系。的移动,计算不同位置的点对之间的距离。最后,计算凸包顶点之间的距离之和,得到凸包的周长。函数用于计算凸包的周长:首先对输入的点按照。用于构建凸包过程中的临时点存储。函数用于计算两个点之间的距离。:计算两个点之间的距离的平方。

u014114223的博客 977

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

洛谷-2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

题目描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度。 输入输出格式 输入格式: 输入数据的第一行包括一个整数 N。N(0 <= N <= 10,000)表示农夫约翰想要围住的放牧点的数目。接下来 N 行,每行由两个实数组成,Xi 和 Yi,对应平面上的放牧点...

mkopvec的博客 207

[洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)

题目大意:求一个点集凸包边长 题解:求凸包,直接求 卡点:发现在较后面数位上有较小的误差,还以为是浮点数误差,最后发现是构造函数写成了$int$类型 C++ Code: #include <algorithm> #include <cstdio> #include <cmath> #include <iostream> #i...

weixin_33847182的博客 197

这一世,要学会二维凸包

重生小说?

达瓦里希,这里禁喵。 1364

【模板】凸包问题

模板题:洛谷P2742 圈奶牛 [USACO5.1]Fencing the Cows Part 1 Concept 凸包概念: (非数学用语)简单来讲就是,二维坐标系中给定若干点坐标,尽可能少地选择其中若干个点进行两两连线,使连线能包含所有给定点。【精准数学定义详见计算几何中对凸包的定义】 凸包性质: 如果要将给定所有点全部围住,且要求最终多边形周长最短,则凸包为这一问题的最优方案(证明:两点间直线最短)(注:凸包并非面积最小的最优解;面积最小 很可能是凹多边形)可借助下图思考。(图源:https://

高斯的博客 353

【计算几何】二维凸包——Graham's Scan法

凸包 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。右图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。 一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧地圈起来,并且为凸边形,这就是凸包了。 数学定义:设S为欧...

weixin_30760895的博客 558

~凸包(二维板子)~(结合各位大佬的文章总结的)

什么是凸包? 小知识: 1)极角排序:就是选取一个最左的点,按y最小,其次x最小来定义,接下来所有的点针对该点的射线,按角度由小到大,若相同按距离由近到远来排序。 2)左转判定:这个和叉积有关,对于向量p1(x1,y1),p2(x2,y2)如果x1y2-x2y1>0,则从p1到p2左转 3)夹角公式: ...

qq_51530355的博客 449

计算几何——关于凸包

关于凸包

TS & c++ 627

算法竞赛中的数学 习题集1541-1550(10题)

算法竞赛中的数学 习题集1541-1550(10题)

青少年趣味编程 940

洛谷模板汇整

洛谷模板汇整

Demilly123的博客 883

凸包与旋转卡壳

凸包 平面凸包问题是计算几何中的一个经典问题 给出平面上的n个点,求一个最小的凸多边形,包含给出的所有点 Graham 显然易证凸包的定点一定给出的点中的若干个 可以想象平面上有若干柱子,一个人用绳子从外围将其紧紧缠绕一圈 由于凸包一定是凸多边形 如果用向量表示每条表,那么沿逆时针方向每两条相邻的边叉积一定不小于零 Graham算法就是基于这一点求凸包的 首先将点集按x,y为第一,二关键字升序排序...

niiick 292
上一篇: 【POJ1654】Area【叉积】
下一篇: 【JZOJ3059】【NOIP2012模拟10.26】雕塑【数论】【容斥】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值