题解:计算凸包周长

#include <iostream>
#include <cmath>
#include <algorithm>
const int size=1000;
using namespace std;
struct pint{int x,y;}x[size];
int n,l,ans[size],cnt,sta[size],tail;
bool cmp(pint a,pint b){return (a.y1 && !crossleft(x[sta[tail-1]],x[sta[tail-2]],x[i]))
tail--;
sta[tail++]=i;
}
for(int i=0;i<tail;i++)
ans[cnt++]=sta[i];
tail=0;
sta[tail++]=n-1;
sta[tail++]=n-2;
for(int i=n-3 ;i>=0;i--){
while(tail>1 && !crossleft(x[sta[tail-1]],x[sta[tail-2]],x[i]))
tail--;
sta[tail++]=i;
}
for(int i=0;i<tail;i++)
ans[cnt++]=sta[i];
}
int main(){
int tt;
while(scanf("%d",&tt)!=EOF){
while(tt--){
scanf("%d%d",&n,&l);
for(int i=0;i<n;i++)
scanf("%d%d",&x[i].x,&x[i].y);
jarvis();
double re=4*acos(0.0)*l;
for(int i=0;i<cnt-1;i++)
re+=sqrt((x[ans[i]].x-x[ans[i+1]].x)*(x[ans[i]].x-x[ans[i+1]].x)*1.0
+(x[ans[i]].y-x[ans[i+1]].y)*(x[ans[i]].y-x[ans[i+1]].y)*1.0);
printf("%.0lf\n",re);
if(tt)
printf("\n");
}
}
return 0;
}

最新文章

  1. spring 注解
  2. ZeroMQ接口函数之 :zmq_msg_more - 指出是不是还有更多的消息部分可以接收
  3. Navicat For Mysql快捷键
  4. win7画板橡皮擦改变大小
  5. 【Web】写个HTML页面去调试HTTP接口方便些
  6. 浏览器执行js
  7. git命令行
  8. VisualC#数据库高级教程文档分享
  9. Android学习笔记(1)—Android Studio安装
  10. yum puppet
  11. 【转】android的startActivityForResult学习心得
  12. mybatis框架搭建学习初步
  13. BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )
  14. C# - Environment类,获取桌面的路径
  15. Java对数函数及Java对数运算
  16. C# Redis之ServiceStack
  17. Javaweb---服务器Tomcat配置
  18. c#中winform窗口的隐藏与显示
  19. TCP粘包,拆包及解决方法
  20. 【BZOJ】3209: 花神的数论题

热门文章

  1. English - in the light of(按照,根据)与according to的区别是什么
  2. .Net Mvc4 Kendo Grid Demo
  3. 解决Metadata file does not match checksum错误
  4. 关于&quot;cin&gt;&gt;&quot;输入成功或失败时的“返回值”(转载)
  5. TCP/IP的网际层协议——ARP
  6. Hibernate学习之Hibernate流程
  7. 关于Python网络爬虫实战笔记①
  8. Spring起步(一)Building a RESTful Web Service
  9. HDU 2588 GCD
  10. delphi关于文件操作集锦