hdu1348 Wall(凸包)
来源:互联网 发布:冒泡排序c语言详解 编辑:程序博客网 时间:2024/06/05 06:20
hdu1348
题目
求把给定点围起来的最小周长,其中围墙离点要有L的距离。
思路
挺近凸包,从(抄)模版做起!
代码
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;typedef long long ll;const int maxn=1010;const double pi=atan(1.0)*4;struct node{ int x,y;} e[maxn],res[maxn];int cmp(node a,node b){ if(a.x==b.x)return a.y<b.y; return a.x<b.x;}int cross(node a,node b,node c){ return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);}int convex(int n){ sort(e,e+n,cmp); int m=0,i,k; for(i=0; i<n; i++) { while(m>1&&cross(res[m-1],e[i],res[m-2])<=0)m--; res[m++]=e[i]; } k=m; for(i=n-2; i>=0; i--) { while(m>k&&cross(res[m-1],e[i],res[m-2])<=0)m--; res[m++]=e[i]; } if(n>1)m--; return m;}double length(node a,node b){ return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int main(){ int T,n,l; scanf("%d",&T); while(T--) { scanf("%d %d",&n,&l); for(int i=0; i<n; i++) { scanf("%d %d",&e[i].x,&e[i].y); } int m=convex(n); double ans=0; for(int i=1; i<m; i++) ans+=length(res[i],res[i-1]); ans+=length(res[m-1],res[0]); ans+=(double)2*pi*l; printf("%.0lf\n",ans); if(T!=0) printf("\n"); } return 0;}
0 0
- hdu1348 Wall(凸包)
- hdu1348 Wall 凸包
- HDU1348 Wall 凸包
- Wall(HDU1348,凸包周长)
- hdu1348 Wall(凸包模板题)
- HDU1348 Wall 【简单凸包】
- hdu1348 Wall
- HDU1348-Walls(经典凸包)
- 凸包,模板---hdu1348
- 【计算几何初步-凸包-Graham扫描法-极角序】【HDU1348】 WALL
- hdu1348 Wall (求凸包周长)
- Wall(凸包)
- hdu1348 练习凸包模板使用
- HDU Wall(凸包)
- poj_1113 Wall(凸包)
- [POJ1113]Wall(凸包)
- POJ1113:Wall(凸包)
- hdu1348 凸包 jatvis卷包裹法 (此方法时间复杂度O(n^2))
- SD卡、TF卡、MMC卡以及eMMC芯片的介绍
- C语言中冒泡法、选择法、插入法三种常见排序算法
- 适配器模式
- Hibernate逆向工程
- hdu 1564 paly a game(博弈论找规律)
- hdu1348 Wall(凸包)
- 调用接口进行天气预报
- LeetCode-Palindrome Linked List
- 总结下我常用的垂直水平居中
- javaEE开发中利用过滤器实现防止中文乱码的问题
- xrwang:【译】随机抽样一致性算法(RANSAC)
- 二叉搜索树转换成双向链表——剑指offer
- 小米笔试-二叉树
- 牛顿法及其下山法+C代码