UVA 11626 凸包(含共线)
题意:
给出凸包上的点(无序的),要求从左下角开始按顺序逆时针输出所有凸包上的点~
PS:凸包上的连续三个点存在共线。
题解:
直接套用可以处理共线的凸包模板~
做这个题主要是为了验证模板对不对~
1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 #include <cmath> 7 8 #define N 222222 9 10 using namespace std; 11 12 struct PO 13 { 14 long long x,y; 15 }p[N]; 16 17 int n,top,stk[N]; 18 19 inline bool cmp(const PO &a,const PO &b) 20 { 21 if(a.x==b.x) return a.y<b.y; 22 return a.x<b.x; 23 } 24 25 inline void read() 26 { 27 char str[3]; int sn; n=0; 28 scanf("%d",&sn); 29 for(int i=1,a,b;i<=sn;i++) 30 { 31 scanf("%d%d%s",&a,&b,str); 32 if(str[0]=='N') continue; 33 p[++n].x=(long long)a; p[n].y=(long long)b; 34 } 35 } 36 37 inline long long cross(PO &a,PO &b,PO &c) 38 { 39 return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x); 40 } 41 42 inline long long dot(PO &a,PO &b,PO &c) 43 { 44 return (b.x-a.x)*(c.x-a.x)+(b.y-a.y)*(c.y-a.y); 45 } 46 47 inline void graham()//带共线的graham 48 { 49 sort(p+1,p+1+n,cmp); 50 top=0; 51 stk[++top]=1; stk[++top]=2; 52 long long tmp; 53 for(int i=3;i<=n;i++) 54 { 55 while(top>=2&&((tmp=cross(p[stk[top-1]],p[stk[top]],p[i]))<0||(tmp==0&&dot(p[stk[top-1]],p[stk[top]],p[i])<=0))) top--; 56 stk[++top]=i; 57 58 } 59 int tp=top; 60 for(int i=n-1;i>=1;i--) 61 { 62 while(top>=tp+1&&((tmp=cross(p[stk[top-1]],p[stk[top]],p[i]))<0||(tmp==0&&dot(p[stk[top-1]],p[stk[top]],p[i])<=0))) top--; 63 stk[++top]=i; 64 } 65 } 66 67 inline void go() 68 { 69 graham(); 70 printf("%d\n",n); 71 for(int i=1;i<top;i++) printf("%lld %lld\n",p[stk[i]].x,p[stk[i]].y); 72 } 73 74 int main() 75 { 76 int cas; scanf("%d",&cas); 77 while(cas--) read(),go(); 78 return 0; 79 }
转载于:https://www.cnblogs.com/proverbs/archive/2013/02/25/2927818.html
UVA 11626 凸包(含共线)相关推荐
- 安全帽识别与火焰识别系统功能应用
安全帽识别是用深度学习的算法对监控视频进行实时分析,如果监控画面发现人员未佩戴安全帽,鹰眸系统会发出警报提醒管理员或提醒现场工作人员自觉佩戴安全帽,系统后台还会自动保存时间.地点及相应的照片.AI人工 ...
- UVA 1438 - Asteroids(三维凸包)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 361 Cops and Robbers(凸包应用)
UVA 361 Cops and Robbers(凸包应用) http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...
- uva 811 - The Fortified Forest(暴力+凸包)
题目链接:uva 811 - The Fortified Forest 最多就15棵树,枚举哪些树要砍,剩下的做凸包. #include <cstdio> #include <cst ...
- UVa 109 - SCUD Busters(凸包计算)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVA 109 SCUD Busters【凸包模拟题】
题目大意:世界由几个互不重叠领土但彼此敌对的国家组成,每个国家有一个发电站,负责给本国发电. 1,给出每个国家的建筑数(包括发电站和房子数),每个国家用最少的围墙将本国保护起来(凸包): 2,现在有不 ...
- UVa 109 SCUD Busters (凸包面积判断点是否在凸包内部)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa 11168 Airport , 凸包
题意: 给出平面上n个点,找一条直线,使得全部点在直线的同側.且到直线的距离之平均值尽量小. 先求凸包 易知最优直线一定是凸包的某条边,然后利用点到直线距离公式进行计算. #include<cs ...
- UVa 10652 (简单凸包) Board Wrapping
题意: 有n块互不重叠的矩形木板,用尽量小的凸多边形将它们包起来,并输出并输出木板总面积占凸多边形面积的百分比. 分析: 几乎是凸包和多边形面积的裸题. 注意:最后输出的百分号前面有个空格,第一次交P ...
最新文章
- 企业建立规范化IT运维管理制度的重要性
- Linux运维工程师面试题第二套
- 2016012075 谢月月 散列函数的应用及其安全性
- android重新加载程序,从被杀死的Android应用程序中恢复
- C++ Tricks
- WebRTC基本介绍
- cordova 实现网页缓存_如何解决ionic,cordova混合开发的app缓存大的问题
- MySQL高级-MySQL并发参数调整
- android学习笔记---51_编码实现软件界面,把固定不变的界面写到xml中,逻辑改变的写到程序中,
- Oracle 补丁体系 及 opatch 工具 介绍
- [硬件]_ELVE_STLINK下载出现nternal command error问题
- 常用证件照照片规格(英寸) (厘米) (像素)
- win7配置FTP服务器
- 揭晓丨易知微吉祥物WEI WEI IP形象设计大赛获奖作品出炉
- PKU1390UVA10559方块消除+弱化版P2135
- Python房价分析和可视化<anjuke二手房>
- Normalized Cut的C++代码 Linux Win
- go-viper实践
- 手把手教你学习R语言
- 樊登读书会终身成长读后感_终身成长读后感
热门文章
- 在当当买了python怎么下载源代码-python爬虫爬取当当网
- python 自动化-五大自动化测试的Python框架
- python界面设计实例-Python GUI项目实战(二)主窗体的界面设计与实现
- 为什么黑客用python-为什么黑客都用Python
- python程序实例电话本-利用Python电话本小程序!这波操作你给几分?
- python难学不-python难学吗-没有编辑基础可以学python吗?
- python电脑配置要求cpu-Python限制内存和CPU使用量的方法(Unix系统适用)
- 学完了python能做什么-学完Python能做什么
- python 用途-Python在每个行业的用处
- python切片语法-详解Python 切片语法