题目大意:给出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 100005 using 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>)
return true;
else if(op== && 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=;
cnt=;
memset(ans,,sizeof(ans));
scanf("%d",&n);
scanf("%d%d%d",&point[].id,&point[].x,&point[].y);
for(int i=;i<n;i++)
{
scanf("%d%d%d",&point[i].id,&point[i].x,&point[i].y);
if(point[i].y < point[].y)//找出起点:左下方的点
swap(point[],point[i]);
else if(point[i].y==point[].y && point[i].x < point[].x)
swap(point[],point[i]);
}
sort(point,point+n,cmp);
ans[cnt++]=point[pos++].id;
for(int i=;i<n;i++)
{
sort(point+i,point+n,cmp);
ans[cnt++]=point[pos++].id;
}
printf("%d ",cnt);
for(int i=;i<cnt;i++)
printf("%d%c",ans[i],i==cnt-?'\n':' ');
}
return ;
}

POJ 1696 Space Ant 极角排序(叉积的应用)的更多相关文章

  1. poj 1696 Space Ant 极角排序

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  2. poj 1696 Space Ant(模拟+叉积)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3840   Accepted: 2397 Descrip ...

  3. poj 1696 Space Ant (极角排序)

    链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  4. POJ 1696 Space Ant(极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2489   Accepted: 1567 Descrip ...

  5. poj 1696:Space Ant(计算几何,凸包变种,极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2876   Accepted: 1839 Descrip ...

  6. POJ 1696 Space Ant 【极角排序】

    题意:平面上有n个点,一只蚂蚁从最左下角的点出发,只能往逆时针方向走,走过的路线不能交叉,问最多能经过多少个点. 思路:每次都尽量往最外边走,每选取一个点后对剩余的点进行极角排序.(n个点必定能走完, ...

  7. 2018.07.04 POJ 1696 Space Ant(凸包卷包裹)

    Space Ant Time Limit: 1000MS Memory Limit: 10000K Description The most exciting space discovery occu ...

  8. POJ 1696 Space Ant 卷包裹法

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3316   Accepted: 2118 Descrip ...

  9. POJ 1696 Space Ant(点积的应用)

    Space Ant 大意:有一仅仅蚂蚁,每次都仅仅向当前方向的左边走,问蚂蚁走遍全部的点的顺序输出.開始的点是纵坐标最小的那个点,開始的方向是開始点的x轴正方向. 思路:从開始点開始,每次找剩下的点中 ...

随机推荐

  1. CNN- 数据预处理

    对于CNN输入的数据,常见的有三种处理方式: 1.Mean subtraction.  将数据的每一维特征都减去平均值.在numpy 中 X -= np.mean(X, axis = 0) 2.Nor ...

  2. Asp.Net BulletedList使用及详解

    BulletedList使用及详解   文章来源:www.cnblogs.com/xiohao/archive/2013/10/09/3359263.html BulletedList是一个让你轻松在 ...

  3. Windows Search Service

    Windows Search Service是一个全方位的托管云服务,可以允许开发者通过.Net SDK或者REST API多种多样的搜索服务. 如果你想开发一个搜索服务,那么你的服务应该包含以下组件 ...

  4. Python基础篇-day7

    本节目录-面向对象1 类介绍1.1 面向对象oo特征1.2 类的特性1.3 创建与调用 1.3.1 基本结构 1.3.2 结构说明 1.3.3 对外部提供只读访问接口 1.3.4 析构方法2 继承2. ...

  5. css display属性介绍

    none此元素不会被显示. block此元素将显示为块级元素,此元素前后会带有换行符. inline默认.此元素会被显示为内联元素,元素前后没有换行符. inline-block行内块元素.(CSS2 ...

  6. Vue.js 指南-基础

    Installation 可以使用的方式: script标签方式加载vue.js cdn https://unpkg.com/vue@2.0.5/dist/vue.js npm Introductio ...

  7. scp免密码传送文件

    一.单向 ssh-keygen -t rsa 单向无密码访问远程服务器操作比较简单,比如服务器A需要无密码访问服务器B(A–>B),那么只需要在服务器A生成密钥对,将生成的公钥上传到服务器B的相 ...

  8. js中运算符

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  9. cpanel导入大数据库(mysql)的方法

    phpmyadmin是一件很方便的在线管理MySQL数据库的工具,但对于较大的数据库的导出和导入却很容易出错.特别是导入工作,通常5M已经是它的极限了.这里,主要介绍一下如何通过cPanel导入大型的 ...

  10. Node.js:服务器与数据流

    1.Node 常被用来构建服务器,下面代码就是创建了一个服务器. var http = require('http'); var server = http.createServer(); serve ...