hdoj 1348 Wall (凸包周长)

c++算凸包周长 c++算凸包周长c++算凸包周长c++算凸包周长c++算凸包周长c++算凸包周长 立即下载

http://acm.hdu.edu.cn/showproblem.php?pid=1348
题意:一个国王有 n n 个城堡,他要在这些城堡外建城墙,使得城墙距离任一城堡的距离都大于l,给出这些城堡的坐标,求城墙的最小周长。

找到这些城堡的凸包,然后对于凸包的边平行着建就行,在拐角处画一个半径为 l l 的圆弧,最终所有圆弧合起来正好是一个半径为l的圆,所以最终答案是凸包的周长+半径为 l l 的圆的周长。
求凸包用的是Graham算法,最后结果要四舍五入。
还有一个小小的格式问题就是每组数据之间有一个空行,最后一组数据后面没有空行。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
struct node
{
    int x,y;
} a[105],p[105];
int top,n;
double l,ans,pi=acos(-1.0);
double cross(node p0,node p1,node p2)//计算叉乘,p0p1 X p0p2 注意p0,p1,p2的位置,这个决定了方向
{
    return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x);
}
double dis(node a,node b)//计算距离,这个用在了当两个点在一条直线上
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
bool cmp(node p1,node p2)//极角排序
{
    double z=cross(a[0],p1,p2);
    if(z>0||(z==0&&dis(a[0],p1)<dis(a[0],p2)))
        return 1;
    return 0;
}
int round_double(double number)
{
    return (number>0.0)?(number+0.5):(number-0.5);
}
void Graham()
{
    int k=0;
    for(int i=0; i<n; i++)
        if(a[i].y<a[k].y||(a[i].y==a[k].y&&a[i].x<a[k].x))
            k=i;
        swap(a[0],a[k]);//找p[0],取最下,同最下取最左
        sort(a+1,a+n,cmp);
        top=1;
        p[0]=a[0];
        p[1]=a[1];
        for(int i=2; i<n; i++)//控制进栈出栈
        {
            while(cross(p[top-1],p[top],a[i])<0&&top)
                top--;
            top++;
            p[top]=a[i];
        }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        ans=0;
        scanf("%d%lf",&n,&l);
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&a[i].x,&a[i].y);
        }
        Graham();
        top++;
        p[top]=p[0];
        for(int i=0;i<top;i++)
        {
            ans+=dis(p[i],p[i+1]);
        }
        printf("%d\n",round_double(ans+l*2*pi));
        if(T) printf("\n");
    }
    return 0;
}
跟着Cell学单细胞转录组分析(五):单细胞转录组marker基因鉴定及细胞群注释 书接上回(跟着Cell学单细胞转录组分析(四):单细胞转录组测序UMAP降维聚类)。完成数据降维和细胞聚类后,最主要的环节和工作就是确定各个细胞群,明确是什么类型的细胞,正群的细胞定群很关键,涉及到整个研究,所以这一步宁愿多费时间,也不要出错。当然,这也不是一蹴而就的,需要反复的确认。 要确定各个群是什么细胞,首先需要了解细胞群的marker基因,因为不同类型的细胞突出 表达的基因也是不同的。这里使用FindAllMarkers鉴定各个细胞群的高表达基因。 DefaultAssay(scedata) 阅读详情

相关推荐

通达信+大智慧数据同步存调DLL

数据同步存调DLL(通达信版+大智慧版)

guleba的博客 2053

计算几何:凸包

极点:在一组点中,若沿着某一个点做直线,必然能找到一条直线使得所有点都在直线的另一侧,则这个点为极点。 凸包:给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点 平面的一个子集S被称为是“凸”的,当且仅当对于任意两点p,s∈S,线段ps都完全属于S。(平面凸包定义): 计算凸包: Graham扫描法: 复杂度O(nlog...

wangqianqianya的博客 916

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1673

【计算几何】【凸包周长】【思维】城墙

here 主要是看边界的情况,因为他说最边上的距离不能超过L这就意味着拐角处外面的城墙应该是属于弧状的。 这样最后的结果就会是凸包周长加上2ΠL2ΠL2ΠL 套一下板子就好了。 ac code #include <bits/stdc++.h> #include <iostream> #include<algorithm> #include <cstdio> #include <cmath> #define re register int #defi

peacesir的博客 239

find命令

命令是 Linux/Unix 系统中用于搜索文件和目录的强大工具,支持多种搜索条件组合,并能对搜索结果执行各种操作。以下是其详细说明、常用参数及示例: 搜索路径:指定起始目录(如 、 或 表示当前目录)。 查找条件:基于文件名、类型、大小、时间等属性过滤。 处理动作:对匹配结果执行操作(如打印、删除、执行命令等)。 常用参数及示例 1. 按名称查找 :区分大小写匹配文件名。 :不区分大小写匹配文件名。 2. 按文件类型查找 :指定文件类型。 文件类型: :普通文件 :目录 :符号链接

qiao2458的博客 1134

【故障处理】- ORA-01722

在执行升级脚本@?/rdbms/admin/catupgrd.sql时报错ora-01722。

weixin_39099660的博客 855

凸包——求周长、面积

凸包 什么是凸包 在平面图中给定一些点集,去求出一些点:相邻2点的连线能够将所有的点包围起来 葛立恒(Graham)扫描法 1、先找到左下角的点P0(一定在凸包上) 2、以P0为原点,将其他的点按照极坐标排序,角度小的排在前,若角度相同,距离近的排在前 3、P0 ,P1 入栈,从P2(第三个点)开始,若P2 在直线P0 P1(p[ i-1 ] p [ i ]) 的左边 ,则P2入栈,否则P1 出...

HappyCode 2841

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2608

求凸包周长

#include #include #include #include #include #include #include #include #include #include #include const double pi = acos(-1.0); using namespace std; const int MAXN=10005; const double eps=

protecteyesight的博客 980

AIGC实战——变分自编码器(Variational Autoencoder, VAE)

变分自编码器通过在模型中引入随机性,并限制潜空间中的点的分布来解决自编码器存在的问题。只需进行一些微小的调整,就可以将自编码器转换为变分自编码器,从而使其成为真正的生成模型。在本节中,我们介绍了变分自编码器的基本原理,并使用 `Keras` 实现了一个变分自编码器用于生成 Fashion-MNIST 图像。

盼小辉丶的博客 1万+

ABAP Bits and Bytes 完全参考,理解内存、字节、位运算与类型解释

ABAP开发中业务代码与底层字节处理的差异:业务层关注采购订单、会计凭证等语义信息,而接口开发需处理十六进制、位运算等底层操作。文章通过整数变量示例说明同一段字节在不同类型解释下会呈现不同值,并介绍x类型、位运算及类型转换的实际应用。这些知识在文件接口、加密传输等场景中尤为重要,开发者需注意字节序、编码等问题。建议将底层协议处理与业务逻辑分离,以保持代码清晰和可维护性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 142

POJ 1113 Wall(凸包应用)

POJ 1113 Wall(凸包应用) http://poj.org/problem?id=1113 题意: ZOJ1456        给你一个多边形X的所有点,要你用一个另一个图形A把这个多边形围起来,使得该多边形的周长最小且该图形A上的每一个点离原始边行的距离>=L. 要你求图形A的最小周长? 分析:        首先该图形A的最小周长肯定是X的凸包长度+半径为L的圆周长之和.

code 1023

从入门到精通|Yalmip+Cplex在电力系统中的应用(Matlab代码实现)

​ 火电成本包括运行成本、碳捕集成本,其中火电运行成本由运行维护成 本和发电煤耗成本构成,发电煤耗与其出力关系: ,F 为机组煤耗量(kg/h),P 为机组出力/MW;运行维护成本按照 0.5 倍煤耗成本考虑,碳捕集成本取决于碳排放量及碳捕集单价,火电机组相关参数如附表 1 所示,电煤价格为 700 元/t ​

weixin_46039719的博客 1552

hdu 1348 Wall 凸包模板题

#include #include #include #include #include #include using namespace std; const int maxn=1010; const double pi=atan(1.0)*4; struct node{ int x,y; }e[maxn],res[maxn]; int cmp(node a,node b)

冷月之殇 3744

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

HDOJ 1348 Wall 凸包

Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4001    Accepted Submission(s): 1131 Problem Description Once upon a time ther

码代码的猿猿 998

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HDOJ 1348 Wall (凸包)

【题意】给了n个点,求这n个点的凸包的边长之和再加上一个给定圆的周长! 【分析】第一次做凸包问题,通过这个题也了解了凸包是什么,好神奇啊,这里分享一个求凸包的方法的博客,个人认为写得很不错点击打开链接!~~~~ 【解题思路】直接用求凸模板求最小凸包即可,这里最常用的可能就是上面博客里面提到的Andrew算法了(这里是水平序的)首先=按照x=从小到大排序(如果x相同,按照y排序),删除重复点后得

I good vegetable a! 630

hdoj Wall 1348 (凸包)

Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4588    Accepted Submission(s): 1312 Problem Description Once upon a time there wa

yanghui07216的博客 398

【HDOJ】1348 Wall【计算几何-凸包】

临近区域赛,想要系统地过一下知识点,发现了一个好网站,推荐一波。 HDOJ 根据题目类型做的分类(杭电牛逼) 第一次做凸包题 题意就是求凸包构成的多边形周长+一个圆的周长 凸包的概念 在二维欧几里得空间中,凸包可想象为一条刚好包着所有点的橡皮圈。 求凸包的方法 《算导》给了两种方法 Graham扫描法 Jarvis步近法 详见《算导》 我这边用的是《算法竞赛入门经典-训练指南》里的模板,基于...

weixin_33849942的博客 153

POJ 1113 Wall(凸包周长)

题目链接:POJ 1113 Wal

fobdddf的专栏 711

【计算几何】凸包问题 (Convex Hull)

凸多边形是指所有内角大小都在0π范围内的简单多边形。

qq_73702550的博客 1461

POJ 1392(凸包的周长)

求凸包的长度,先求出凸包的外围的点(求法上篇说过)。 然后求每每两个点的之间的距离就可以了。 如果求凸包的面积就可以使用。 公式是: s1=x1*y2-y1*x2; S=s1+s2+...s(n-1)+s(n)(共有n个点) s/=2; #include #include #include using namespace std; const int maxn

KJBU2 908

POJ 1113 && HDU 1348 Wall(凸包周长)

给出 n 个点,以及数 L,要求修一面城墙花费最少的资源,使得每个点到达城墙的距离全都大于 L 求出这 n 各点所形成的凸包的周长+以 L 为半径的圆的周长即可 const int N=1e4+5; int i,j,k; int n,m,t; struct Point { double x,y; Point(double x=0,double y=0):x(x),y(y){} }p[N],ch[N]; ...

C_Dreamy的博客 413

Wall POJ 1113 (凸包周长)

题目地址:http://poj.org/problem?id=1113 给你n个城堡的坐标(理想为点),建一个围墙离最近城堡的距离为L,求围墙的最小长度。 思路:先构建一个凸包,先假设凸包的边为围墙,再把围墙后移L,围墙之间的空隙用用圆连接。 围墙=凸包周长+2π*L; 凸包的周长for循环求即可。 #include<stdio.h> #include<math.h> #i...

呼吸 274

1113 Wall

Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20496   Accepted: 6725 Description Once upon a time there was a greedy King who ordered his chief Arch

Stay foolish, stay hungry 454

【杭电oj】1348 - Wall (凸包)

题目大意: 给出一些点,求距离这些点形成的凸包的端点L的图形的周长。 即凸包的周长加上半径为L的园的周长,因为该图形在端点处一定是形成圆角,因为封闭,故圆角转过360度形成了一个圆。 AC代码: #include&lt;iostream&gt; #include&lt;algorithm&gt; #include&lt;math.h&gt; #include&lt;std...

Dicer_的博客 375

HDOJ 1348 Wall (凸包模板题)

Wall Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4577    Accepted Submission(s): 1308 Problem Description Once upon a time there wa

滴水穿石,慢慢积累,总会有成果 627

hdu1348 凸包 用了kuangbin的模板.自己做的

#include #include #include #include using namespace std; #define pi acos(-1.0) const int MAXN=1005;//点数 struct point { int x,y; }; point list[MAXN]; int stack[MAXN],top; int cross(point p0,poin

万事屋 1426
上一篇: 51Nod 1022 石子归并v2 (区间DP+四边形优化)
下一篇: hdoj 2837 Calculation (指数循环节)
sdxtcqs
博客等级 码龄11年 8粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值