[蓝桥杯]ALGO-185.算法训练_Trash Removal

 

题目描述:

 

代码如下:

 

 1 #include <algorithm>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <cstring>
 6 #include <iostream>
 7 #define INF 0x7fffffff
 8 using namespace std;
 9  
10 typedef long long LL;
11 const int N = 1000 + 10;
12 const double PI = acos(-1.0);
13 const double esp = 1e-10;
14  
15 int dcmp(double x) {if(fabs(x) < esp) return 0; else return x<0?-1:1;}
16  
17 struct Point
18 {
19     double x,y;
20     Point(double x=0,double y=0):x(x),y(y){ }
21 };
22  
23 typedef Point Vector;
24  
25 Vector operator + (Vector A, Vector B) {return Vector(A.x+B.x, A.y+B.y);}
26 Vector operator - (Vector A, Vector B) {return Vector(A.x-B.x, A.y-B.y);}
27 Vector operator * (Vector A, double p) {return Vector(A.x*p, A.y*p);}
28 Vector operator / (Vector A, double p) {return Vector(A.x/p, A.y/p);}
29 bool operator < (const Point& a, const Point& b){ return a.x<b.x || (a.x==b.x && a.y<b.y);}
30 bool operator == (const Point& a, const Point& b){return dcmp(a.x-b.x)==0 && dcmp(a.y-b.y)==0;}
31  
32 double Dot(Vector A, Vector B){ return A.x*B.x+A.y*B.y; }
33 double Length(Vector A){return sqrt(Dot(A, A));}            //计算向量的模 
34 double Angle(Vector A, Vector B) {return acos( Dot(A, B)/Length(A)/Length(B) );}//计算两向量的角度 
35  
36 double Cross(Vector A, Vector B) { return A.x*B.y - A.y*B.x ;}        //计算两向量的叉积 
37 double Area2(Point A, Point B, Point C){return Cross(B-A, C-A); }    //三点形成的两向量 
38  
39 double DistanceToLine(Point P, Point A, Point B)    //计算以AB为底边的高 
40 {
41     Vector v1 = B-A, v2 = P-A;
42     return fabs(Cross(v1, v2)) / Length(v1);
43 }
44 int ConvexHull(Point *p, int n, Point *ch)
45 {
46     sort(p,p+n);    //排序各顶点 
47     int m = 0;
48     for(int i=0;i<n;i++)    //维护凸壳 
49     {
50         while(m>1 && Cross(ch[m-1]-ch[m-2], p[i]-ch[m-2]) <= 0) m--;
51         ch[m++] = p[i];        //记录凸壳的顶点 
52     }
53     int k = m;    //记录凸壳顶点数 
54     for(int i = n-2 ;i>=0;i--)    //除去底边的两个顶点 
55     {
56         while(m>k && Cross(ch[m-1]-ch[m-2], p[i]-ch[m-2]) <= 0) m--;
57         ch[m++] = p[i];
58     }
59     if(n > 1) m--;
60     return m;
61 }
62  
63 int n;
64 Point P[N],ch[N];
65  
66 int main()
67 {
68     int C=1;
69     while(scanf("%d",&n)!=EOF && n)    //输入多边形的边数 
70     {
71         for(int i=0;i<n;i++)
72         {
73             scanf("%lf%lf",&P[i].x,&P[i].y);//记录各点的坐标 
74         }
75         int m=ConvexHull(P,n,ch);    //得到该多边形的凸壳顶点数 
76         double ans = 1e20;            //用于记录最小宽度 
77         for(int i=1;i<=m;i++)        //枚举凸壳的顶点 
78         {
79             double max_dis = 0;        //用于记录各底边的高 
80             for(int j=0;j<m;j++)    //确定底边后,查找其对应的高,并记录最大值 
81             {
82                 max_dis = max(max_dis, DistanceToLine(ch[j],ch[i%m],ch[i-1]));
83             }
84             ans = min(ans, max_dis);//最小宽度即为最大高度 
85         }
86         ans = ceil(ans * 100) / 100.0;
87  
88         printf("Case %d: %.2lf\n",C++, ans);
89     }
90  
91     return 0;
92 }
C++解法

 

 

解题思路:

该题使用了几何计算中的凸边算法(什么是凸边:https://blog.csdn.net/HouszChina/article/details/79251474)

首先对输入多边形的点进行凸壳维护,得到凸壳的点集

然后枚举底边,计算对应的高,并保留最大的高度(即题目要求的最小宽度)

 

转载于:https://www.cnblogs.com/mind000761/p/10363015.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从客户端...中检测到有潜在危险的 Request.Form 值

在.net中&#xff0c;Request时出现有HTML、Javascript等字符串时&#xff0c;系统会认为是危险值&#xff0c;运行显示“从客户端……中检测到有潜在危险的Request.Form值”这样的错。解决办法&#xff1a; &#xff08;1&#xff09; 在.aspx文件头中加入这句&#xff1a; …

android 之 百度地图

简介 百度地图Android定位SDK为基于移动客户端开发LBS应用提供基础定位能力。 功能介绍 功能介绍&#xff1a; 地图展示&#xff1a;包括2D图、卫星图、3D图地图展示。 地图操作&#xff1a;提供控制平移、缩放、底图旋转、变换视角等地图相关操作的功能。 短串分享&#xff1a…

从javaagent迁移到JVMTI:我们的经验

当您需要从JVM内部收集数据时&#xff0c;您会发现自己很危险地接近Java虚拟机内部进行工作。 幸运的是&#xff0c;有一些方法可以避免被JVM实现细节所困扰。 Java之父没有给您提供过两个漂亮的工具供您使用。 在这篇文章中&#xff0c;我们将说明两种方法之间的差异&#xf…

HTML--HTML对象的关于位置和大小的属性的图解

转载于:https://www.cnblogs.com/duadu/archive/2007/08/08/6166687.html

flower.php,flower.php

session_start();//定义个常量&#xff0c;用来授权调用includes里面的文件define(IN_TG,flower);define(IN_JS,flower);//定义个常量&#xff0c;用来指定本页的内容define(SCRIPT,message);//引入公共文件require dirname(__FILE__)./includes/common.inc.php;//判断是否登录…

BABOK - 需求管理和沟通(Requirements Management and Communication)概要

本文更新版本已挪至 http://www.zhoujingen.cn/itbang/345.html ------------------------------------------- 描述 需求管理和沟通描述我们如何管理冲突、问题、变更&#xff0c;并确保涉众和项目团队在方案范围内保持一致。不同项目的复杂度和方法论支持都不一样&#xff0c…

Java 8的默认方法:可以做什么和不能做什么?

什么是默认方法 在Java 8发行版中&#xff0c;您可以修改接口以添加新方法&#xff0c;以便该接口与实现该接口的类保持兼容。 如果您要开发一个库&#xff0c;该库将由基辅到纽约的几位程序员使用&#xff0c;那么这非常重要。 在Java 8出现之前&#xff0c;如果您在库中发布了…

P1047 校门外的树

P1047 题目描述 某校大门外长度为L的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴&#xff0c;马路的一端在数轴0的位置&#xff0c;另一端在L的位置&#xff1b;数轴上的每个整数点&#xff0c;即0,1,2,…,L&#xff0c;都种有一棵…

.Net Core Swagger:Actions require an explicit HttpMethod binding for Swagger 2.0

添加完Swagger包引用后运行报错&#xff1a;Actions require an explicit HttpMethod binding for Swagger 2.0 第一时间想到了父类控制器 没有添加 [HttpPost] 之类的特性 添加后就可以解决这个报错原因 但是我的父类控制器里的两个方法只是为了做返回值的一些处理&#xff0c…

matlab impdt,实验1 基于Matlab的数字信号处理基本操作

图1-7 离散时间信号的基本运算及波形图>>title(x2(n)),axis([-15 15 0 1]) >>subplot(413)>>stem(n3,x,fill),grid on >>title(x3(n)),axis([-15 15 0 1]) >>subplot(414)>>stem(n4,x,fill),grid on >>title(x4(n)),axis([-15 15 0 …

画函数图形的C#程序(改进版) (转)

我在10月份发表过一篇随笔“画函数图形的C#程序&#xff0c;兼论一个病态函数”&#xff0c;在那篇随笔中写道&#xff1a; 这个画函数图形的C#程序有一个严重的缺点&#xff0c;就是函数表达式是直接写的源程序中的&#xff0c;不能象SciLab和Matlab那样交互式地输入。 后来&a…

Swift-UITextView占位文字及占位文字颜色扩展(可在xib中直接使用)

使用案例 extension UITextView {private struct RuntimeKey {static let hw_placeholderLabelKey UnsafeRawPointer.init(bitPattern: "hw_placeholderLabelKey".hashValue)/// ...其他Key声明}/// 占位文字IBInspectable public var placeholder: String {get {re…

Java 8中Lambda表达式的阴暗面

这篇文章可能不会使我成为任何新朋友。 哦&#xff0c;好吧&#xff0c;无论如何我从来没有真正在学校受到欢迎。 但是&#xff0c;让我们说清楚。 就语言而言&#xff0c;Java 8的最大特色无疑是Lambda表达式。 几年来&#xff0c;它一直是功能语言&#xff08;例如Scala和Clo…

JQ实现弹幕效果

JQ实现弹幕效果&#xff0c;快来吐糟你的想法吧 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>JQ实现弹幕效果</title><style type"t…

获取表的所有列名

selectname fromsyscolumns whereidobject_id(表名)下面这样也可以:selectcolumn_name frominformation_schema.columns wheretable_name news转载于:https://www.cnblogs.com/zhuboxingzbx/archive/2007/09/03/880049.html

天下武功唯快不破------实验吧

题目地址&#xff1a;http://www.shiyanbar.com/ctf/1854 打开链接 全是英文&#xff0c;能力有限&#xff0c;翻译一下&#xff0c;好像没其他东西了&#xff0c;查看一下源码 让用post请求&#xff0c;丢到burp改一下 看到response有一个FLAG: UDBTVF9USElTX1QwX0NINE5HRV9GT…

JS实现文本中查找并替换字符

JS实现文本中查找并替换字符 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html><html> <head><style type"text/css">*{font-family:"微软雅黑";font-size:16px;margin:0;padding:0;letter-spaci…

在没有IDE的情况下编译和运行Java

最近一个名为“ 不使用IDE编译Java软件包 ”的Java subreddit线程提出了一个问题&#xff1a;“是否有一个命令将软件包内的一组Java文件编译到一个单独的文件夹中&#xff08;以下简称为bin&#xff09;&#xff0c;以及如何我会去运行新的类文件吗&#xff1f;” 该帖子的作者…

[转]MySQL 表锁和行锁机制

本文转自&#xff1a;http://www.cnblogs.com/itdragon/p/8194622.html MySQL 表锁和行锁机制 行锁变表锁&#xff0c;是福还是坑&#xff1f;如果你不清楚MySQL加锁的原理&#xff0c;你会被它整的很惨&#xff01;不知坑在何方&#xff1f;没事&#xff0c;我来给你们标记几个…

使用JS实现文字搬运工

使用JS实现文字搬运工 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <title>使用JS实现文字搬运工&…