题意:给出二维坐标轴上 n 个点,这 n 个点构成了一个城堡,国王想建一堵墙,城墙与城堡之间的距离总不小于一个数 L,求城墙的最小长度,答案四舍五入。

思路:城墙与城堡直线长度是相等的,当城堡出现拐角时,城墙必然会出现一段圆弧,这些圆弧最终会构成一个半径为 L 的圆,所以答案就是凸包的周长 + 圆的周长。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 1050
#define PI 4*atan(1.0)
#define eps 1e-8
struct Node
{double x,y;
} p[N],stack[N];
double mulit(Node a,Node b,Node c)//向量ab与向量ac的叉乘
{return ((b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x));
}double dist(Node s,Node e)//s点与e点的距离的平方(此处如果直接开根怕影响在传递的时候影响精度)
{return (s.x-e.x)*(s.x-e.x)+(s.y-e.y)*(s.y-e.y);
}int cmp(Node a,Node b)//设<p1,p2,...pm>为对其余点按以p0为中心的极角逆时针排序所得的点集(如果有多个点有相同的极角,除了距p0最远的点外全部移除)
{if(mulit(p[0],a,b)>0)//向量p[0]a在向量p[0]b顺时针方向,返回1return 1;if(mulit(p[0],b,a)==0&&(dist(p[0],b)-dist(p[0],a)>eps))//p[0]a与p[0]b共线,而且b点距离更远return 1;return 0;
}int Graham(int n)
{int top=2;sort(p+1,p+n,cmp);stack[0]=p[0];stack[1]=p[1];stack[2]=p[2];for(int i=3;i<n;i++){while(top>=1&&mulit(stack[top-1],p[i],stack[top])>=0)top--;stack[++top]=p[i];}return top;
}
int main()
{int T,n,m;scanf("%d",&T);while(T--){scanf("%d %d",&n,&m);for(int i=0; i<n; i++)scanf("%lf %lf",&p[i].x,&p[i].y);int k=0;for(int i=0; i<n; i++){if(p[k].y>p[i].y||(p[k].y==p[i].y&&p[k].x>p[i].x))k=i;}swap(p[0],p[k]);// p[n]=p[0]; int top=Graham(n);double sum=0.0;for(int i=1; i<=top; i++)sum+=sqrt(dist(stack[i],stack[i-1]));sum+=sqrt(dist(stack[0],stack[top]));sum+=2*PI*m;printf("%.0lf\n",sum);if(T) printf("\n");}return 0;
}

hdu 1348 wall相关推荐

  1. HDU 1348 Wall ( 凸包周长 )

    链接:传送门 题意:给出二维坐标轴上 n 个点,这 n 个点构成了一个城堡,国王想建一堵墙,城墙与城堡之间的距离总不小于一个数 L ,求城墙的最小长度,答案四舍五入 思路:城墙与城堡直线长度是相等的, ...

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

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

  3. HDU 1348(Wall)

    计算所有点的凸包,然后凸包的每条边向外平移 L,相邻边用弧填充,所有弧合起来恰好是一个圆.所以最终的长度为凸包所有边的长度加上圆的周长. #include <cstdio> #includ ...

  4. hdu 4810 Wall Painting

    先将每个数字  转成二进制:  然后统计每一位在N个数字中有多少个 1  然后知道 组合中 1 的个数为奇数个时需要加上(i<<i): 然后就是简单的模拟了 #include<ios ...

  5. 杭电OJ分类题目(3)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...

  6. 点赞取消html,jquery点赞和取消点赞插件

    /* @author:Romey * 动态点赞 * 此效果包含css3,部分浏览器不兼容(如:IE10以下的版本) */ $(function(){ $("#praise").cl ...

  7. 区域赛铜牌专题(一)

    区域赛铜牌专题 题号 题目 知识点 HDU 5532 Almost Sorted Array 贪心,LIS HDU 5533 Dancing Stars on Me HDU 5536 Chip Fac ...

  8. Java解惑 电子书

    --表达式谜题 Java 谜题 1--表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转 吗? public static boolean isOdd( ...

  9. hdu 4391 Paint The Wall 线段树 +优化 2012 Multi-University Training Contest 10 )

    http://acm.hdu.edu.cn/showproblem.php?pid=4391 题意: 刷墙, 以开始 有 n个节点,每个节点有一种颜色 ,m 次询问 m次  输入 a,l,r,z 如果 ...

最新文章

  1. python试题for循环布尔值_Python自我修炼(升仙中....整数,布尔值,字符串,for循环)
  2. linux的 su 错误 Permission denied 和 Incorrect pa...
  3. 在灾难发生之时,你在Facebook的社交定位或许能救你一命
  4. 一起开心2020暑假训练第二周 图论(模板题)
  5. 浏览器的同源策略与跨域
  6. 这个AI狠!能互译C++、Java和Python,以后只学一种编程就行吗
  7. python 标准库 —— io(StringIO)
  8. Concurrent and Parallel
  9. [摘录]第5章 谈判原则
  10. Bitmap头文件说明
  11. paip.python错误解决21
  12. 高德发布十一出行预测:全国高速流量增长7%
  13. 跨终端实践-天猫试戴的解决方案
  14. 手机计算机应用的图片,怎么把手机的照片传到电脑 四种方法轻松导入
  15. Java版的TxT转换器下载_TXT转MP3格式转换器
  16. Nuxt开发中The client-side rendered virtual DOM tree is not matching server-rendered content.的问题
  17. 电路设计_自恢复保险丝参数说明
  18. Mifare S50与Mifare S70
  19. goback history 传递参数_goback 返回上一页触发刷新 / 回调传参
  20. 全加器和半加器的区别

热门文章

  1. Java代码审计学习笔记
  2. 洗衣机程序c语言代码大全,全自动洗衣机控制器设计的单片机代码
  3. 小黄图升级了,接入更加强大的鉴黄功能
  4. 微信小程序播放背景音乐,关闭背景音乐的操作
  5. 基于随机森林算法的贷款违约预测模型研究(Give me some credit)
  6. 微信查券返利机器人公众号搭建教程分享
  7. 1080i/p-HDTV
  8. Couldn‘t find meta-data for provider with authority xxx.fileProvider
  9. 安装 Swoole教程
  10. 我是一个*** (二)