题目大意:给出n个点的编号和坐标,按逆时针方向连接着n个点,按连接的先后顺序输出每个点的编号。

题目思路:Cross(a,b)表示a,b的叉积,若小于0:a在b的逆时针方向,若大于0a在b的顺时针方向。每次都sort一下,找出在当前点逆时针方向的最远的点。数据很小O(N*N*log(N))的复杂度0s AC了……

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
#define MAX 100005using namespace std;int n,pos,ans[MAX];struct node
{int id,x,y;
}point[MAX];int Dist(int x1,int y1,int x2,int y2)
{return sqrt((x1-x2)*(x1-x2)*1.0 + (y1-y2)*(y1-y2)*1.0);
}int Cross(int x1,int y1,int x2,int y2,int x3,int y3)
{return (x1-x2)*(y1-y3)-(x1-x3)*(y1-y2);
}bool cmp(struct node A,struct node B)
{int op=Cross(point[pos].x,point[pos].y,A.x,A.y,B.x,B.y);if(op>0)return true;else if(op==0 && Dist(point[pos].x,point[pos].y,A.x,A.y)<Dist(point[pos].x,point[pos].y,B.x,B.y))return true;return false;
}int main()
{int T,cnt;scanf("%d",&T);while(T--){pos=0;cnt=0;memset(ans,0,sizeof(ans));scanf("%d",&n);scanf("%d%d%d",&point[0].id,&point[0].x,&point[0].y);for(int i=1;i<n;i++){scanf("%d%d%d",&point[i].id,&point[i].x,&point[i].y);if(point[i].y < point[0].y)//找出起点:左下方的点swap(point[0],point[i]);else if(point[i].y==point[0].y && point[i].x < point[0].x)swap(point[0],point[i]);}sort(point,point+n,cmp);ans[cnt++]=point[pos++].id;for(int i=1;i<n;i++){sort(point+i,point+n,cmp);ans[cnt++]=point[pos++].id;}printf("%d ",cnt);for(int i=0;i<cnt;i++)printf("%d%c",ans[i],i==cnt-1?'\n':' ');}return 0;
}

View Code

转载于:https://www.cnblogs.com/alan-W/p/6019998.html

POJ 1696 Space Ant 极角排序(叉积的应用)相关推荐

  1. POJ - 1696 Space Ant(极角排序)

    题目链接:点击查看 题目大意:现在有一只特殊的蚂蚁,它会按照以下规则尽可能长的寻找路径: 不能回头 不能右转 只能逆时针行走 现在给出n个点,输出最长的路径 题目分析:既然是逆时针旋转,那么每次只能走 ...

  2. POJ 1696 Space Ant(极角排序)【计算几何】

    ACM博客_kuangbin POJ 1696 Space Ant(极角排序) Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  3. poj 1696 Space Ant

    大致题意: 一只蚂蚁,只会向左转,现在给出平面上很多个点,求解一种走法, 能使得蚂蚁能经过的点最多,每个顶点该蚂蚁只能经过一次,且所行走的路线不能发生交叉. 卷包裹法: 形象思维假想一根无限长的绳子, ...

  4. 简单几何(极角排序) POJ 2007 Scrambled Polygon

    题目传送门 题意:裸的对原点的极角排序,凸包貌似不行. /************************************************ * Author :Running_Time ...

  5. 计算几何----极角排序

    一.极角,极径,极轴,极点概念 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向). 对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r ...

  6. BZOJ 1132 [POI2008]Tro(极角排序)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1132 [题目大意] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N&l ...

  7. HihoCoder - 1879 Rikka with Triangles(极角排序求所有锐角三角形的面积)

    题目链接:点击查看 题目大意:给出 n ( n <= 2000 ) 个点,求出所有不同的锐角三角形的面积 题目分析:n^3 暴力枚举肯定是不可以的,和之前写过的一个题目思路很像:HDU-5784 ...

  8. BZOJ.1132.[POI2008]Tro(极角排序)

    BZOJ 洛谷 考虑暴力,每次枚举三个点,答案就是\(\frac12\sum_{k<j<i}(i-k)\times(j-k)\). 注意到叉积有分配率,所以固定\(k\),枚举\(i,j\ ...

  9. L3-021 神坛 (30 分)(极角排序)

    题目链接 在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线 ...

最新文章

  1. SpringBoot使用prometheus监控
  2. 利用JFreeChart生成简单柱状图(Java)
  3. Jersey Restful Application with tomcat
  4. 2、leetcode278 第一个错误的版本**
  5. java new url 带密码_获取密码重置URL
  6. AS3深拷贝数据对象(1)深拷贝基本数据类型
  7. Linux系统编程--2(环境变量,进程控制)
  8. pycharm连接sqlite
  9. PHP AJAXFORM提交图片上传并显示图片源代码
  10. 修改rpm中的文件重新打包
  11. MySQL中的前缀索引
  12. python%20是什么类型的语言
  13. 在数组中寻找出现次数超过数组长度一半的数
  14. ADT版本不同导致的一个问题
  15. 学生信息管理系统(附运行效果图和源码下载)分页技术(后台封装json数据传递到前端显示,动态分页等)(Mybatis,json,ajax,jQuery实用整合示例)
  16. AutoCAD导出的图片十分模糊——亲测有效解决
  17. 【Altium Designer10详细安装】
  18. 纯屏和液晶显示器有什么区别
  19. 基于Python的高校网络课程数据分析
  20. jQuery的五种初始化加载写法

热门文章

  1. 一加7充电_刘作虎:一加7没有无线充电,Dash是最好的快充之一
  2. 有些道理经历过就是道理,没经历过可能就是心灵鸡汤。
  3. 上海库源电气OrCAD视频教程
  4. 倒排索引原理_搜索引擎都在用的倒排索引——原理与实现
  5. 计算机动画人机交互,北大计算机系多媒体与人机交互.ppt
  6. android采用什么图标单位,Android支持的长度单位
  7. 动态调用类 java_Java动态调用类中方法
  8. 学了C++不会STL,简直少了左膀右臂
  9. gsoap搭建WebService服务
  10. 对Android源码分析总结(Z)