hdu1348 Wall 凸包

常微分方程 (ODE) 和 随机微分方程 (SDE) 常微分方程(Ordinary Differential Equations, ODE)和随机微分方程(Stochastic Differential Equations, SDE)是数学中描述系统动态行为的重要工具。它们有一些相似之处,但在处理随机性方面存在显著差异。 阅读详情

Wall

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4839    Accepted Submission(s): 1392


Problem Description
Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the King's castle. The King was so greedy, that he would not listen to his Architect's proposals to build a beautiful brick wall with a perfect shape and nice tall towers. Instead, he ordered to build the wall around the whole castle using the least amount of stone and labor, but demanded that the wall should not come closer to the castle than a certain distance. If the King finds that the Architect has used more resources to build the wall than it was absolutely necessary to satisfy those requirements, then the Architect will loose his head. Moreover, he demanded Architect to introduce at once a plan of the wall listing the exact amount of resources that are needed to build the wall.
Your task is to help poor Architect to save his head, by writing a program that will find the minimum possible length of the wall that he could build around the castle to satisfy King's requirements.



The task is somewhat simplified by the fact, that the King's castle has a polygonal shape and is situated on a flat ground. The Architect has already established a Cartesian coordinate system and has precisely measured the coordinates of all castle's vertices in feet.
 

Input
The first line of the input file contains two integer numbers N and L separated by a space. N (3 <= N <= 1000) is the number of vertices in the King's castle, and L (1 <= L <= 1000) is the minimal number of feet that King allows for the wall to come close to the castle.

Next N lines describe coordinates of castle's vertices in a clockwise order. Each line contains two integer numbers Xi and Yi separated by a space (-10000 <= Xi, Yi <= 10000) that represent the coordinates of ith vertex. All vertices are different and the sides of the castle do not intersect anywhere except for vertices.
 

Output
Write to the output file the single number that represents the minimal possible length of the wall in feet that could be built around the castle to satisfy King's requirements. You must present the integer number of feet to the King, because the floating numbers are not invented yet. However, you must round the result in such a way, that it is accurate to 8 inches (1 foot is equal to 12 inches), since the King will not tolerate larger error in the estimates.

This problem contains multiple test cases!

The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.

The output format consists of N output blocks. There is a blank line between output blocks.
 

Sample Input
1 9 100 200 400 300 400 300 300 400 300 400 400 500 400 500 200 350 200 200 200
 

Sample Output
1628


求这些点的凸包的周长,然后加上以要求距离为半径的圆的周长即为所求


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

using namespace std;

int n;
const int maxn = 1005;
const double PI = acos(-1);

struct Point {
	int x, y;
}p[maxn], stack[maxn];

int cross(Point a, Point b, Point c) {  //ab x ac
	return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
}

double dis(Point a, Point b) {  //两点距离
	return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

bool cmp(const Point& a, const Point& b) {  //以p[0]为基准按照极角逆时针排序
	int t = cross(p[0], a, b);
	if (t < 0 || (t == 0 && dis(p[0], a) > dis(p[0], b)))
		return false;
	return true;
}

double Gram() {  //凸包Graham算法
	int mi = 0, x = p[0].x, y = p[0].y;
	for (int i = 1; i < n; i++) {  //找最坐下角的点
		if (p[i].x < x || (p[i].x == x && p[i].y < y)) {
			mi = i;
			x = p[i].x;
			y = p[i].y;
		}
	}
	Point tem = p[0];
	p[0] = p[mi];
	p[mi] = tem;

	sort(p + 1, p + n, cmp);  //逆时针排序

	p[n] = p[0];

	/*栈初始化,因为排序是逆时针,所以p[0]p[1] x p[0]p[2]
	*一定大于等于零,stack[2]可以直接入栈
	*/
	stack[0] = p[0];
	stack[1] = p[1];
	stack[2] = p[2];

	int top = 2;

	for (int i = 3; i <= n; i++) {
		//若有右拐且栈内元素大于等于两个,弹出栈顶元素
		while (cross(stack[top - 1], stack[top], p[i]) <= 0 && top >= 2) --top;
		stack[++top] = p[i];
	}
	double ans = 0;
	for (int i = 0; i < top; i++) {
		ans += dis(stack[i], stack[i + 1]);
	}
	return ans;
}

int main()
{
	int T, L;
	bool first = true;
	scanf("%d", &T);
	while (T--) {
		scanf("%d%d", &n, &L);
		for (int i = 0; i < n; i++)
			scanf("%d%d", &p[i].x, &p[i].y);
		if (!first)
			puts("");
		else
			first = false;
		printf("%.0f\n", Gram() + 2.0 * PI * L);  //凸包周长加上圆周长
	}
	return 0;
}





[VT虚拟化驱动]安装DPC回调检测CPU对VT的支持 文章目录前言一、驱动基本框架二、安装DPC回调三、检测CPU对VT的支持本章代码def.h:DriverEntry.cpputil.cpp 前言 对于VT的介绍网上有很多详细的介绍,这里不再赘述,只需要知道它有比操作系统还高的权限,可以利用这一点进行某些操作,如内存隐藏, 无痕HOOK ,MSR HOOK, 调试或者反调试, 这里直奔主题 一、驱动基本框架 虚拟机设置里虚拟化引擎设置: 新建一个空的WDM工程,平台设置为x64平台,右键属性——>Inf2Cat——>Run Inf2Cat设置 阅读详情

相关推荐

CSP-J 复试考点

可以用来训练思维,对于学习时间短的同学,动态规划可以帮助你迅速进入编程状态,也有助于帮你发现题目背后可能隐藏的更简便的算法。动态规划、贪心都是和子问题相关的,动态规划的基本思想是将一个大的问题划分成子问题,接着分别求解,而且能够将一些重复的计算记忆化,大大提高效率。难度加大,会涉及到二分、动态规划之类的算法,容易遗漏考虑点,不易得全分,考试的时候要注意全面性。一般是压轴题,算法不明显,剪枝的搜索、动态规划、状压 DP、树形 DP 、树、图等。枚举算法是指,列举出所有可能的取值,从中找出最优解。

GuanHeTian的博客 2214

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

永磁同步电机自抗扰控制ADRC(位置环/速度环控制器)Matlab/Simulink仿真(S-Function)

ESO是ADRC的核心,其作用是跟踪被控对象的输出,同时给出受控对象的各阶状态变量以及系统总扰动的实时估计,将其补偿到控制器中,实现动态补偿线性化。NLSEF采用非线性函数把TD产生的跟踪及微分信号与ESO给出的状态变量估计值之间的误差进行非线性组合得到初级控制量,然后同总扰动的补偿量一起生成最终的控制信号。自抗扰控制(ADRC)技术的核心思想是将简单的积分串联型视为标准模型,把系统模型中不同于标准型的部分和外部干扰之和视为总扰动,并将其扩张为一个新的状态。看作系统内外部扰动之和。令一个高阶状态变量为。

m0_66341377的博客 7612

(hdu step 7.1.4)Surround the Trees(求凸包的周长——计算将所有点都包围起来的最小凸多边形的周长)

题意:Surround the TreesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 209 Accepted Submission(s): 104 Problem DescriptionThere are a lot of trees in

黄俊东的专栏 1739

SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)

本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。

x1y2z的博客 1万+

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)

在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。

darcsdn 2128

POJ 1113 Wall (凸包+求周长)

Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21502 Accepted: 7048 Description Once upon a time there was a greedy King who ordered his ch

K键盘里的青春K 478

rk3399开发环境的介绍

由于Bluez的介绍文档有限,以及对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度,学习曲线也相对较陡,所以我有了这个想法,专门对Bluez做一个系统性的介绍,尽可能的涵盖所有内容。

朝气蓬勃 708

二维凸包详解

凸包大意:给一堆点,让你求一个最小的多边形使得其囊括所有点。 实际上就是拿条绳子在一堆钉子外面绕一圈,绕成的图形就是所求多边形,即绕绳法。 但这里并不讨论绕绳法,而是介绍一种叫Graham的算法。 前置芝士:叉积(a×b=a.x·b.y+a.y·b.x) 叉积不同于点积,叉积的结果是向量,而点积的结果是标量。 设平面直角坐标系有三点A(x0,y0),B(x1,y1),C(x2,y2)。 有共起点...

tylon2006的博客 2029

Opencv项目实战:09 物体尺寸测量

《Opencv项目实战:09 物体尺寸测量》本项目主要是运用了之前扫描文档的思想,以A4纸为背景,检测其中区域的物体长和宽。我的摄像头无法固定,所以是手持的,且由于我在寝室里面是真的没有找到合适的测量物体以及背景色(全是米色或原木色的)。所以效果有所欠缺,但经过ps修改的图片,检测的效果还是很不错的。

m0_62919535的博客 1万+

使用MATLAB和Simulink来设计并仿真一个智能家居多传感器数据融合系统

智能家居多传感器数据融合系统旨在通过集成来自多种不同类型的传感器的数据,以提供更精确和可靠的环境信息或用户状态监测。例如,将温度、湿度、光照强度、运动检测等多种传感器的数据结合起来,可以更好地了解家庭内部的状态,并做出相应的调整或响应。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个智能家居多传感器数据融合系统。

amy_mhd的博客 187

求点到曲线的最短距离 垂直逼近算法

y = ln(x) + Math.pow(x,0.000333) + Math.exp(x*x) + x *x 求 (1,2)到该曲线的最短距离。很简单就是  Math.pow((y - 2)*(y - 2) + (x-1)(x-1),0.5)   求最大值或求导无法求得此距离。或者是  (y-2)/(x-1)  * y' = -1   这个时候就需要利用算法来求得此距离。 这里引入垂直逼...

追求专业 1万+

Python教程:一文了解Python的深拷贝与浅拷贝

理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。

旦莫的博客 3967

Wall HDU1348(计算几何+凸包)

WallHDU - 1348 Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the King's castle. The King was so greedy, that he would not listen to his Architect's p...

勉強しているユキさんです 316

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

HDU1348 Wall 【简单凸包】

【题目大意】 首先读入N,L分别表示有N座城堡以及城墙到城堡的最近距离不得低于L 然后N行输入每个城堡的平面坐标 需要求出最短的能够满足条件的城墙长度。 条件: 1)城墙到城堡的最近距离不得低于L 2)城墙必须包含最外圈的所有城堡 输入包含多组数据 保留0位小数输出 【解题思路】 该题是典型的凸包问题 在此简单介绍一下凸包: 凸包(Convex Hull)是一个计算

Lannister_Stark的博客 610

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU1348 Wall 凸包

题目链接:HDU1348 题目大意:给你一些n个点,求其凸包,然后将每条边向外平移一段距离l,这时候每个相邻的两条边之间就会有一个夹角,用需要用弧来填充,画一下就很明白了,然后所有的弧长加起来就是, 2∗π∗l2*π*l 另外还需要注意的一点是,题目要求输出四舍五入整数,这样写 %.0lf 考虑到凸包模板代码还没有看懂,所以没有加上注释,等我以后看懂了,会更新的:) A

xyry 397

jre9下载 jdk9

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

[hdu 1348] Wall · 凸包

大概就是,给你n个点和一个值L,求这n个点的凸包,然后求与凸包相距l的外圈的周长。 结果=凸包的周长+半径的L的圆的周长 求凸包: 首先将n个按x坐标排序,然后选第一个点作为一个确定的点(最左边的点肯定在凸包上) 然后分两步,先求上凸包,再求下凸包。 求上凸包时,我们将目前已经在凸包里的点压入栈中,当做到第i号点的时候,如果发现 向量在向量的逆时针方向,那么说明top是凸包内的点而

山外小楼夜听雨 668

HDU-1348 Wall 凸包

#include #include #include using namespace std; const int maxn = 1005; #define PI 3.14159265 int n,r; struct Point { double x,y; Point( double x = 0,double y = 0 ): x(x),y(y) { } }point[maxn],ch[max

菜鸟成长ing 510

HDU1348--Wall(凸包)

佷裸的一道凸包题,就是多组数据,每组给你点数和圆的半径,然后一堆坐标,最后输出圆的周长加上这个最小凸包的周长。 这里我用的是Graham_scan方法,具体的就是: 1.我们取Y坐标最小的点A作为原点建立平面直角坐标系,然后以剩余点与X轴的夹角从小到大逆时针依次标记,可以不难发现A,B必在这个最小凸包上 2.然后按照字母顺序连接,首先连接AB,然后是BC,我们发现∠ABC...

bailiu9392的博客 179

hdu1348 Wall(凸包)

hdu1348题目求把给定点围起来的最小周长,其中围墙离点要有L的距离。思路挺近凸包,从(抄)模版做起!代码#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath>using namespace std; typedef long long ll;const int m

天道酬勤 313

hdu 1348 Wall(凸包模板题 Graham)

hdu 1348 Wall(凸包模板题)

2095

hdu 1348 Wall (凸包模板)

/* 题意: 求得n个点的凸包,然后求与凸包相距l的外圈的周长。 答案为n点的凸包周长加上半径为L的圆的周长 */ # include # include # include # include using namespace std; # define PI acos(-1.0) struct node { int x; int y; }; node a[1

苍竹林 672

hdu_1348_Wall(凸包)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 题意:让你求n个点的凸包,凸包离点的距离为l 题解:就凸包周长+一个半径为l的圆周长 #include #include #include #define F(i,a,b) for(int i=a;i<=b;++i) using namespace std; /* * 求凸包,Grah

bin_gege的博客 428

HDU 1348 wall (简单凸包)

http://acm.hdu.edu.cn/showproblem.php?pid=1348 这题是在求凸包的基础上,再求每个顶点对应角度及半径的弧长,外面围墙的直线部分与城墙的凸包长相同;再求弧长总和,注意每段弧长对应的角与凸包顶点的夹角是一样的,所以,又因为每个顶对应的半径长都是l,所以一个多边形的所顶点对应弧长相加其实就是一个圆。 所以,最后总长为 凸包边长+2*3.14159...

anccx84886的专栏 121

HDU 1348 Wall ( 凸包周长 )

链接:传送门 题意:给出二维坐标轴上 n 个点,这 n 个点构成了一个城堡,国王想建一堵墙,城墙与城堡之间的距离总不小于一个数 L ,求城墙的最小长度,答案四舍五入 思路:城墙与城堡直线长度是相等的,当城堡出现拐角时,城墙必然会出现一段圆弧,这些圆弧最终会构成一个半径为 L 的圆,所以答案就是凸包的周长 + 圆的周长 balabala: 采用Jarvis步进法来求凸包,Jarvis...

dijingzhou4259的博客 148

凸包入门之卷包裹法 & hdu 1348 wall

在二维空间中,凸包可以简单的认为是最小的包含所有点的凸多边形。 简单的卷包裹法:寻找最边缘(一般是最下方的,次之是最左边的)点。假想用一根绳子向右逆时针旋转碰到另一个点,这样新找到的点作为端点,继续旋转绳子重复找点的步骤,一直围成一个凸多边形。时间复杂度:O(n^2) (如果在寻找的射线上有多个点的情况,使用和保留离前端点最远的那一点) 因为涉及到旋转和夹角,所以运用到了叉积。 例

theArcticOcean 1930
上一篇: hdu 1392 Surround the Trees 凸包周长
下一篇: hdu2544 最短路 Dijstra算法堆优化,Bellman-Ford,Bellman-Ford队列优化
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值