- 浏览: 38587 次
-
文章分类
- 全部博客 (41)
- 卧鸟个去 (2)
- Transform (2)
- Mathmatic (9)
- Plant-Tree (7)
- Data-Struct (12)
- Red-Black-Tree (1)
- Radix-Tree (1)
- Trie (2)
- String (4)
- BST (2)
- Amazing-Union-Find-Set (1)
- HDU (27)
- OJ (32)
- BFS (3)
- Pretty-Suffix-Array (2)
- POJ (6)
- Graceful-Segment-Tree (2)
- Geometry (6)
- Priority-Queue (2)
- Dynamic-Programing (1)
- DP (3)
- LCS (1)
- Convex-Hull (2)
- Triangulation (1)
- DFS (3)
- Combinatorial-Mathematics (2)
- Big-Number (1)
- Statistic (3)
- STL (1)
- Shortest-Path (3)
- ZOJ (1)
- Leftist-Tree (1)
- Prime (1)
- Binary-Index-Tree (1)
- (1)
- Stack (1)
- SPFA (0)
- CRT (1)
Wall
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 18398 | Accepted: 5992 |
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.
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.
Sample Input
9 100 200 400 300 400 300 300 400 300 400 400 500 400 500 200 350 200 200 200
Sample Output
1628
Hint
结果四舍五入就可以了
Source
琴日我地EK1412分享左滴题目,其中101majia就分比我地呢个凸包入门题目。
之后今日早上用左个几钟睇完导论里面几何部分,发觉自己以前果中高中计算方法真系落后鸟{= =}。
用高数里面既叉积实在可以做到好多野,而且精度高,判断又快,基本可以称得上系几何算法既核心。
关于叉积(CrossProduct)
大家可以系高数或者其他几何书度睇到,呢度就吾再9up。
今日既重点系GrahamScan。
首先介绍极角排序(PolarAngleSort)
个名好有型,但系其实好简单。
首先讲一下咩叫极角(PolarAngle):
举个例子,假设我地以坐标点O(1, 1)为极点,有一个点P(2, 2),P - O = (1, 1),则系该极点既极坐标系里面,P点“极角”就为
45度。
跟住到极角排序:
我地取y坐标最小既点(y坐标相同时取x较小者)作为极点,然后从次小极开始逆时针扫描,同一极角取与极点距离较远者
较近者"舍去",按扫描到既次序得到既点序列就系极角排序之后既序列。
之后系GrahamScan算法:
算法首先将排序后点集前三个点压入堆栈,然后顺序扫描,判断用栈顶同埋次栈顶元素同,待测点点组成既折线用叉积判定该点
转向,如果转右,就弹出栈顶元素,继续判断直到待测点转左,之后将待测点压入栈顶,证明正确性好长,参考算法导论{= =}。
翻译一下导论里面既伪代码:
GRAGAM_SCAN(Q) //Q为原始点集
1 对Q进行极角排序
2 PUSH(p0,S)
3 PUSH(p1,S)
4 PUSH(p2,S) //S为栈,初始化压入排序后Q前三个点
5 for i <- 3 to m do
7 while 以栈顶,次栈顶及pi组成既角是否右转
do POP(S)
8 PUSH(pi, S)
10 return S //最后S即为凸集,顺序为逆时针
分析题目:
其实就系稳一个凸包,然后放大。
我初先WA问题出系两度:
第一、我将放大捻复杂左,造成精度大缺失,其实就系加上一个半径为L既圆。
第二、无留意一个地方,就系"同一极角取与极点距离较远者较近者舍去",其实根据算法特性,吾一定要舍去(只需要系上面伪代码while
判断中加入判断平行),但系我地要考虑一个特殊情况,就系初始化时候,如果无舍弃,第三个点p2就有可能系与p0p1共线并且无条件
压入S,造成最后统计周长时候多出一段多余既p1p2。所以我选取p2时候加入平行判断,AC。
下面贴代码:
8966829 | GZHU1006100106 | 1113 | Accepted | 232K | 32MS | C++ | 2094B | 2011-07-22 15:46:02 |
#include <iostream> #include <vector> #include <cmath> #include <algorithm> using namespace std; #define MAXI 1011 #define sq(x) ((x) * (x)) //Square struct pt { double x, y; } ps[MAXI]; vector<pt> st; //Pseudo-Stack {= =} int n, len; double l; double dlt(pt &a, pt &b, pt &o) //Cross-Product { return (o.x - a.x) * (b.y - a.y) - (b.x - a.x) * (o.y - a.y); } double dis(pt &a, pt &b) //Distance { return sqrt(sq(a.x - b.x) + sq(a.y - b.y)); } bool pac(pt &a, pt &b) //Polar-Angle-Compare { double delta = dlt(a, b, ps[0]); if ( delta == 0 && sq(a.x - ps[0].x) + sq(a.y - ps[0].y) > sq(b.x - ps[0].x) + sq(b.y - ps[0].y)) return 1; else if (delta < 0) return 1; return 0; } void pas() //Polar-Angle-Sort { int i, id; for (id = 0, i = 1; i < n; i++) if ((ps[i].y == ps[id].y && ps[i].x < ps[id].x) || ps[i].y < ps[id].y) id = i; swap(ps[0], ps[id]); sort(ps + 1, ps + n, pac); #if 0 for (i = 0; i < n; i++) printf("p%d = [%lf, %lf]\n", i, ps[i].x, ps[i].y); #endif } void ghs() //Graham's-Scan { int i; pas(); len = 2; st.clear(); st.push_back(ps[0]); st.push_back(ps[1]); for (i = 2; i < n; i++) if (dlt(st[1], ps[i], st[0]) != 0) break; st.push_back(ps[2]); for (i++; i < n; i++) { while (dlt(st[len], ps[i], st[len - 1]) >= 0) { st.pop_back(); len--; } st.push_back(ps[i]); len++; } len++; #if 0 for (i = 0; i < len; i++) printf("p%d = [%lf, %lf]\n", i, st[i].x, st[i].y); #endif } double sta() //Statistic { int i; double tsu = 0.0; for (i = 0; i < len; i++) tsu += dis(st[i % len], st[(i + 1) % len]); #if 0 printf("%lf\n", dlt(st[1], st[2], st[0]) / (dis(st[0], st[1]) * dis(st[1], st[2]))); #endif return tsu + 4.0 * asin(1.0) * l; } int main() { int i; #if 0 printf("%lf\n", 4.0 * asin(1.0) * 100); #endif while (scanf("%d%lf", &n, &l) != EOF) { for (i = 0; i < n; i++) scanf("%lf%lf", &ps[i].x, &ps[i].y); ghs(); printf("%d\n", (int)(sta() + 0.5)); } return 0; }
第一次用代码控件…………
今日学到好多几何野,想写好多野,以后再写写吧,关于几何既野{=__.=+}
大家都可以去101majia既关于PKU1113题目文章果度参考下噶!
发表评论
-
HDU 1058 Humble Numbers
2011-08-02 15:55 1250Humble Numbers Time Limit: 200 ... -
HDU 2095 find your present (2)
2011-08-02 16:13 852find your present (2) Time Lim ... -
HDU 1022 Train Problem I
2011-08-02 21:00 1033Train Problem I Time Limit: 20 ... -
2142 HDU box
2011-08-02 21:21 789box Time Limit: 3000/1000 MS ( ... -
HDU 2151 Worm
2011-08-01 20:48 888Worm Time Limit: 1000/1000 MS ... -
HDU 2722 Here We Go(relians) Again
2011-08-02 00:06 1057Here We Go(relians) Again Time ... -
HDU 3791 二叉搜索树
2011-08-02 14:26 1232二叉搜索树 Time Limit: 20 ... -
PKU 2352 Stars
2011-07-31 21:47 1056Stars Time Limit: 1000MS ... -
PKU 2774 Long Long Message
2011-07-31 21:26 926Long Long Message Time Li ... -
PKU 2777 Count Color
2011-07-31 21:31 822Count Color Time Limit: 1 ... -
HDU 2098 分拆素数和
2011-07-31 21:08 1084分拆素数和 Time Limit: 1000/1000 MS ... -
ZOJ 3512 Financial Fraud .
2011-07-31 20:49 1317Financial Fraud Time Limit: 3 ... -
HDU 1798 Tell me the area .
2011-07-31 20:47 1167Tell me the area Time Limit: 3 ... -
HDU 2962 Trucking .
2011-07-31 20:46 716Trucking Time Limit: 20000/100 ... -
HDU 1596 find the safest road .
2011-07-31 20:45 626find the safest road Time Limi ... -
HDU 2553 N皇后问题 .
2011-07-31 20:20 725N皇后问题 Time Limit: 2000/1000 MS ... -
HDU 1392 Surround the Trees .
2011-07-31 20:19 829Surround the Trees Time Limit: ... -
HDU 1234 开门人和关门人 .
2011-07-31 20:17 704开门人和关门人 Time Limit: 2000/1000 ... -
HDU 1174 爆头 .
2011-07-31 20:16 634爆头 Time Limit: 2000/1000 M ... -
HDU 1316 How Many Fibs? .
2011-07-31 20:15 998How Many Fibs? Time Limit: 200 ...
相关推荐
### PKU 1113 代码解析:计算凸包周长 #### 问题背景与描述 本题属于计算几何中的经典问题之一——求解一个点集构成的凸包的周长。凸包(Convex Hull)是指在平面上给定一组点时,将这些点包围起来的所有边构成的...
内容概要:本文详细介绍了如何利用Matlab构建、优化和应用决策分类树。首先,讲解了数据准备阶段,将数据与程序分离,确保灵活性。接着,通过具体实例展示了如何使用Matlab内置函数如fitctree快速构建决策树模型,并通过可视化工具直观呈现决策树结构。针对可能出现的过拟合问题,提出了基于成本复杂度的剪枝方法,以提高模型的泛化能力。此外,还分享了一些实用技巧,如处理连续特征、保存模型、并行计算等,帮助用户更好地理解和应用决策树。 适合人群:具有一定编程基础的数据分析师、机器学习爱好者及科研工作者。 使用场景及目标:适用于需要进行数据分类任务的场景,特别是当需要解释性强的模型时。主要目标是教会读者如何在Matlab环境中高效地构建和优化决策分类树,从而应用于实际项目中。 其他说明:文中不仅提供了完整的代码示例,还强调了代码模块化的重要性,便于后续维护和扩展。同时,对于初学者来说,建议从简单的鸢尾花数据集开始练习,逐步掌握决策树的各项技能。
《营销调研》第7章-探索性调研数据采集.pptx
Assignment1_search_final(1).ipynb
美团优惠券小程序带举牌小人带菜谱+流量主模式,挺多外卖小程序的,但是都没有搭建教程 搭建: 1、下载源码,去微信公众平台注册自己的账号 2、解压到桌面 3、打开微信开发者工具添加小程序-把解压的源码添加进去-appid改成自己小程序的 4、在pages/index/index.js文件搜流量主广告改成自己的广告ID 5、到微信公众平台登陆自己的小程序-开发管理-开发设置-服务器域名修改成
《计算机录入技术》第十八章-常用外文输入法.pptx
基于Andorid的跨屏拖动应用设计实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
《网站建设与维护》项目4-在线购物商城用户管理功能.pptx
区块链_房屋转租系统_去中心化存储_数据防篡改_智能合约_S_1744435730
《计算机应用基础实训指导》实训五-Word-2010的文字编辑操作.pptx
《移动通信(第4版)》第5章-组网技术.ppt
ABB机器人基础.pdf
《综合布线施工技术》第9章-综合布线实训指导.ppt
很不错的一套站群系统源码,后台配置采集节点,输入目标站地址即可全自动智能转换自动全站采集!支持 https、支持 POST 获取、支持搜索、支持 cookie、支持代理、支持破解防盗链、支持破解防采集 全自动分析,内外链接自动转换、图片地址、css、js,自动分析 CSS 内的图片使得页面风格不丢失: 广告标签,方便在规则里直接替换广告代码 支持自定义标签,标签可自定义内容、自由截取、内容正则截取。可以放在模板里,也可以在规则里替换 支持自定义模板,可使用标签 diy 个性模板,真正做到内容上移花接木 调试模式,可观察采集性能,便于发现和解决各种错误 多条采集规则一键切换,支持导入导出 内置强大替换和过滤功能,标签过滤、站内外过滤、字符串替换、等等 IP 屏蔽功能,屏蔽想要屏蔽 IP 地址让它无法访问 ****高级功能*****· url 过滤功能,可过滤屏蔽不采集指定链接· 伪原创,近义词替换有利于 seo· 伪静态,url 伪静态化,有利于 seo· 自动缓存自动更新,可设置缓存时间达到自动更新,css 缓存· 支持演示有阿三源码简繁体互转· 代理 IP、伪造 IP、随机 IP、伪造 user-agent、伪造 referer 来路、自定义 cookie,以便应对防采集措施· url 地址加密转换,个性化 url,让你的 url 地址与众不同· 关键词内链功能· 还有更多功能等你发现…… 程序使用非常简单,仅需在后台输入一个域名即可建站,不限子域名,站群利器,无授权,无绑定限制,使用后台功能可对页面进行自定义修改,在程序后台开启生 成功能,只要访问页面就会生成一个本地文件。当用户再次访问的时候就直接访问网站本地的页面,所以目标站点无法访问了也没关系,我们的站点依然可以访问, 支持伪静态、伪原创、生成静态文件、自定义替换、广告管理、友情链接管理、自动下载 CSS 内的图。
【自然语言处理】文本分类方法综述:从基础模型到深度学习的情感分析系统设计
基于Andorid的下拉浏览应用设计实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
内容概要:本文详细介绍了一个原创的P2插电式混合动力系统Simulink模型,该模型基于逻辑门限值控制策略,涵盖了多个关键模块如工况输入、驾驶员模型、发动机模型、电机模型、制动能量回收模型、转矩分配模型、运行模式切换模型、档位切换模型以及纵向动力学模型。模型支持多种标准工况(WLTC、UDDS、EUDC、NEDC)和自定义工况,并展示了丰富的仿真结果,包括发动机和电机转矩变化、工作模式切换、档位变化、电池SOC变化、燃油消耗量、速度跟随和最大爬坡度等。此外,文章还深入探讨了逻辑门限值控制策略的具体实现及其效果,提供了详细的代码示例和技术细节。 适合人群:汽车工程专业学生、研究人员、混动汽车开发者及爱好者。 使用场景及目标:①用于教学和科研,帮助理解和掌握P2混动系统的原理和控制策略;②作为开发工具,辅助设计和优化混动汽车控制系统;③提供仿真平台,评估不同工况下的混动系统性能。 其他说明:文中不仅介绍了模型的整体架构和各模块的功能,还分享了许多实用的调试技巧和优化方法,使读者能够更好地理解和应用该模型。
内容概要:本文详细介绍了基于ADMM(交替方向乘子法)算法在电力系统分布式调度中的应用,特别是并行(Jacobi)和串行(Gauss-Seidel)两种不同更新模式的实现。文中通过MATLAB代码展示了这两种模式的具体实现方法,并比较了它们的优劣。并行模式适用于多核计算环境,能够充分利用硬件资源,尽管迭代次数较多,但总体计算时间较短;串行模式则由于“接力式”更新机制,通常收敛更快,但在计算资源有限的情况下可能会形成瓶颈。此外,文章还讨论了惩罚系数rho的自适应调整策略以及在电-气耦合系统优化中的应用实例。 适合人群:从事电力系统优化、分布式计算研究的专业人士,尤其是有一定MATLAB编程基础的研究人员和技术人员。 使用场景及目标:①理解和实现ADMM算法在电力系统分布式调度中的应用;②评估并行和串行模式在不同应用场景下的性能表现;③掌握惩罚系数rho的自适应调整技巧,提高算法收敛速度和稳定性。 其他说明:文章提供了详细的MATLAB代码示例,帮助读者更好地理解和实践ADMM算法。同时,强调了在实际工程应用中需要注意的关键技术和优化策略。
内容概要:本文深入研究了交错并联Buck变换器的工作原理、性能优势及其具体实现。文章首先介绍了交错并联Buck变换器相较于传统Buck变换器的优势,包括减小输出电流和电压纹波、降低开关管和二极管的电流应力、减小输出滤波电容容量等。接着,文章详细展示了如何通过MATLAB/Simulink建立该变换器的仿真模型,包括参数设置、电路元件添加、PWM信号生成及连接、电压电流测量模块的添加等。此外,还探讨了PID控制器的设计与实现,通过理论分析和仿真验证了其有效性。最后,文章通过多个仿真实验验证了交错并联Buck变换器在纹波性能、器件应力等方面的优势,并分析了不同控制策略的效果,如P、PI、PID控制等。 适合人群:具备一定电力电子基础,对DC-DC变换器特别是交错并联Buck变换器感兴趣的工程师和技术人员。 使用场景及目标:①理解交错并联Buck变换器的工作原理及其相对于传统Buck变换器的优势;②掌握使用MATLAB/Simulink搭建交错并联Buck变换器仿真模型的方法;③学习PID控制器的设计与实现,了解其在电源系统中的应用;④通过仿真实验验证交错并联Buck变换器的性能,评估不同控制策略的效果。 其他说明:本文不仅提供了详细的理论分析,还给出了大量可运行的MATLAB代码,帮助读者更好地理解和实践交错并联Buck变换器的设计与实现。同时,通过对不同控制策略的对比分析,为实际工程应用提供了有价值的参考。
《综合布线施工技术》第8章-综合布线工程案例.ppt