其实这个求凸包周长也算是模版。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iomanip>
using namespace std;
const int maxx=1e5+5;
struct point{double x,y;
}p[maxx],s[maxx];
double dis(point a,point b){//求两个点之间的距离point t;t.x=a.x-b.x;t.y=a.y-b.y;point c=t;return sqrt(c.x*c.x+c.y*c.y);
}
double X(point a,point b){//叉乘return a.x*b.y-a.y*b.x;
}
int cmp(point a,point b){//采用极角判断a处于b的什么方向double x1=a.x-p[1].x,y1=a.y-p[1].y;double x2=b.x-p[1].x,y2=b.y-p[1].y;double x=x1*y2-x2*y1;if(x>0) return 1;//让a处于b的顺时针 if(x==0&&dis(a,p[1])<dis(b,p[1])) return 1;//角度相同看距离 return 0;
}
double multi(point p1,point p2,point p3){point t1,t2;t1.x=p2.x-p1.x;t1.y=p2.y-p1.y;t2.x=p3.x-p1.x;t2.y=p3.y-p1.y;return X(t1,t2);
}
void swap(point &a,point &b){point temp;temp=a;a=b;b=temp;
}
int main(){int n,m;int t;while(cin>>n){if(n==0)break;for(int i=1;i<=n;i++) {cin>>p[i].x>>p[i].y;}if(n==1){cout<<"0.00"<<endl;continue;}else if(n==2){double dists=dis(p[1],p[2]);cout<<setiosflags(ios::fixed)<<setprecision(2)<<dists<<endl;continue; }int k=1;for(int i=2;i<=n;i++){//找到最左下面的坐标点if(p[i].y<p[k].y||(p[i].y==p[k].y&&p[i].x<p[k].x)){k=i;}}swap(p[1],p[k]);sort(p+2,p+1+n,cmp);s[1]=p[1];s[2]=p[2];int t=2;for(int i=3;i<=n;i++){//找到是左转的坐标点while(t>=2&&multi(s[t-1],s[t],p[i])<=0) t--;s[++t]=p[i];}double sum=0;for(int i=1;i<t;i++){sum+=dis(s[i],s[i+1]);}printf("%.2lf\n",sum+dis(s[1],s[t]));}return 0;
}

HDU1392(凸包求周长模版)相关推荐

  1. TZOJ 2569 Wooden Fence(凸包求周长)

    描述 Did you ever wonder what happens to your money when you deposit them to a bank account? All banks ...

  2. 二维凸包(模板) hdu 1348 求凸包的周长

    题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1348 凸包模板: const int N =1010; const double PI = 3.141 ...

  3. java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例

    /* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...

  4. 定义一个长方形类,求周长和面积--学习笔记--16

    1.变量什么时候定义为成员变量 如果这个变量是用来描述这个类的信息的,那么,该变量就应该定义为成员变量 2.变量的范围越小越好,因为能及时的被回收 3.定义一个长方形类,求周长和面积 然后定义一个Te ...

  5. 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test,进行测试

    定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test,进行测试. import java.util.Scanner; class ChangFangXing{private int ...

  6. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法

    设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类.长方形类.正方形类.三角形类来继承图形类,并实现上述两个方法 设计抽象类 就要使用abstract关键字,抽象类中的 ...

  7. Java6面向对象编程创建一个矩形类, 求周长 面积

    package job; /** */ import java.util.Scanner; public class Space { /* 面向对象编程创建一个矩形类, 求周长 面积 */ publi ...

  8. 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test2,进行测试

    /* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...

  9. 1.设计一个长方形的类,成员变量有长与宽,成员函数有求周长与面积,然后进行测试。要求有构造函数、析造函数和复制构造函数。

    1.设计一个长方形的类,成员变量有长与宽,成员函数有求周长与面积,然后进行测试.要求有构造函数.析造函数和复制构造函数. 代码比较简单,论坛有坛友问,顺手写一下当复习 #include <bit ...

最新文章

  1. JavaScript下拉菜单的例子
  2. STM32 电机教程 21 - 基于ST MCLIB无感FOC 与 有感FOC 代码差异分析
  3. html select显示树形菜单_HTML标签总结
  4. Hadoop RPC客户端调用服务代码示例
  5. Servlet 流程控制
  6. PL/SQL-FOR UPDATE 与 FOR UPDATE OF的区别
  7. C++ opengl 线段的绘制
  8. jquery中的ajax 网络请求
  9. Node.js 安装指南
  10. Go 语言本身提供的包管理机制
  11. linux 测试网络端口通不通_能否使用一台矢量网络分析仪来控制多台 E5092A 以增加测试端口数?...
  12. Shiro 详细教程(集各教程内容为一体)
  13. VS2017+DirectX9环境配置
  14. python播放全网视频+打包成exe
  15. 计算机无法备份,无法备份和备份会话失败iTunes问题解决
  16. Fedora core 5.0加载ntfs分区(yum方法)
  17. Yii2中如何使用CodeCeption
  18. UDP都是全双工通信的吗
  19. SYS.MON_MODS$、SYS.MON_MODS_ALL$和DBA_TAB_MODIFICATIONS
  20. GeoServer使用WFS服务时出414 URI Too Long错误

热门文章

  1. 本地应用 v-on补充
  2. java的关键字与保留字
  3. C语言借助两个数的大小交换,引入指针。
  4. 数据维度爆炸怎么办?详解 5 大常用的特征选择方法
  5. 深度学习七个实用技巧
  6. SAL-9 获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'...
  7. Hive的“rowid”
  8. 在创建ArcGIS Server10.5的站点时,系统提示创建‘System/publishingToolsEX.GPServer’失败(转)...
  9. 2016-8-9更新日志
  10. Git入门教程(上)