2015年ALPC暑期专题练习I (计算几何) Space Ant
来源:互联网 发布:linux文件列表 编辑:程序博客网 时间:2024/06/07 19:02
开始用求凸包的方法做的代码。
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<string>#include<map>#include<set>#include<algorithm>#include<vector>#include<stack>#include<queue>#include<cmath>using namespace std;/*********************************************************************/const int MAX_NUM = 50+10;struct plant{ int id,x,y; double cos;}p[MAX_NUM];int sk[MAX_NUM],skLen;double GetCosWithX (plant& a, plant& b){return (b.x-a.x) / sqrt( pow(a.x-b.x,2)+pow(a.y-b.y,2) );}double min_2 (int x,int y) {return x<y?x:y;}int CrossMuti (plant a,plant b){return a.x*b.y-a.y*b.x;}bool cmpPlant (plant a,plant b){ if (a.cos>b.cos)return true; else if (a.cos==b.cos)return a.x<=b.x&&a.y<=b.y; elsereturn false;}void HandleStack (int i){ if (skLen<=3){sk[skLen++]=i;return; } plant ab,bc; while (1) {if (skLen<2){printf ("handle error\n");return;}ab.x=p[sk[skLen-1]].x-p[sk[skLen-2]].x;ab.y=p[sk[skLen-1]].y-p[sk[skLen-2]].y;bc.x=p[i].x-p[sk[skLen-1]].x;bc.y=p[i].y-p[sk[skLen-1]].y;if (CrossMuti(ab,bc)>=0){ sk[skLen++]=i; return;}else --skLen; }}/*********************************************************************/int main(){ int t,n; scanf ("%d",&t); while (t--) {scanf ("%d",&n);int minY=1000,minX=1000,minID;//set<point,int>for (int i=0;i<n;i++){ scanf ("%d%d%d",&p[i].id,&p[i].x,&p[i].y); if (minY>p[i].y){minY=p[i].y;minX=p[i].x;minID=i; } else if (minY==p[i].y && minX>p[i].x){minX=p[i].x;minID=i; }}p[minID].cos=1.0;for (int i=0;i<n;i++){ if (i==minID) continue; p[i].cos=GetCosWithX (p[minID],p[i]);}sort (p,p+n,cmpPlant);/*for (int i=0;i<n;i++) printf ("%d ",p[i].id);printf ("\n");*/skLen=0;sk[skLen++]=0;for (int i=1;i<n;i++){ HandleStack (i); /*for (int j=0;j<skLen;j++)printf ("%d ",p[sk[j]].id);printf ("\n");*/}for (int j=0;j<skLen;j++) printf ("%d ",p[sk[j]].id);printf ("\n"); } return 0;}
0 0
- 2015年ALPC暑期专题练习I (计算几何) Space Ant
- 2015年ALPC暑期专题练习I (计算几何) A
- 2015年ALPC暑期专题练习I (计算几何) B
- 2015年ALPC暑期专题练习I (计算几何) C
- 2015年ALPC暑期专题练习I (计算几何) D Intersecting Lines
- 2015年ALPC暑期专题练习I (计算几何) F Pick-up sticks
- 2015年ALPC暑期专题练习I (计算几何) G - Treasure Hunt
- 2015年ALPC暑期专题练习I (计算几何) J Kadj Squares
- 2015年ALPC暑期代码能力练习I D Upgrading Array
- poj 1696 Space Ant(计算几何)
- poj1696 Space Ant 计算几何
- POJ 1696 Space Ant(卷包裹 计算几何)
- POJ1696---Space Ant(基础计算几何:极角排序)
- poj 1696 Space Ant 计算几何
- POJ 1696 Space Ant <计算几何>
- POJ 1696 Space Ant 计算几何 叉积的应用
- POJ1696 space ant(计算几何,极角排序)
- POJ 1696 Space Ant (计算几何 + 极角排序)
- web技术发展史
- S3C2410的触摸屏控制
- OC多态使用注意
- UVa 10189 SDNU 1127 Minesweeper 【7月20】
- HDU 5285:wyh2000 and pupil
- 2015年ALPC暑期专题练习I (计算几何) Space Ant
- 知识储备:JSON数据解析
- Swift学习笔记系列——(10)方法
- 235 Lowest Common Ancestor of a Binary Search Tree
- 【舶来】 Cydia Substrate框架官网对 '与Xposed对比' 的说明
- java处理高并发高负载类网站的优化方法
- 6.1-键盘之综合示例
- ListView的OnItemClickListener失效的解决办法
- 数据库字符集引发的血案