题目链接:点击查看

题目大意:现在有一只特殊的蚂蚁,它会按照以下规则尽可能长的寻找路径:

  1. 不能回头
  2. 不能右转
  3. 只能逆时针行走

现在给出n个点,输出最长的路径

题目分析:既然是逆时针旋转,那么每次只能走极角最小的一个,每次都排序找就可以了,时间复杂度是n*n*logn,极角排序的cmp函数还是用这张图

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;const double eps = 1e-8;int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}struct Point{double x,y;int id;Point(){}Point(double _x,double _y){x = _x;y = _y;}void input(){scanf("%d%lf%lf",&id,&x,&y);}bool operator < (Point b)const{return sgn(y-b.y)== 0?sgn(x-b.x)<0:y<b.y;}Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}//返回两点的距离double distance(Point p){return hypot(x-p.x,y-p.y);}
}point[N];double xmult(Point p0,Point p1,Point p2)
{return (p1-p0)^(p2-p0);
}int pos;bool cmp(Point a,Point b)
{double temp=xmult(point[pos],a,b);if(sgn(temp)==0)return a.distance(point[pos])<b.distance(point[pos]);return sgn(temp)>0;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n;scanf("%d",&n);for(int i=0;i<n;i++){point[i].input();if(point[i]<point[0])swap(point[i],point[0]);}pos=0;for(int i=1;i<n;i++){sort(point+i,point+n,cmp);pos++;}printf("%d",n);for(int i=0;i<n;i++)printf(" %d",point[i].id);putchar('\n');}return 0;
}

POJ - 1696 Space Ant(极角排序)相关推荐

  1. POJ 1696 Space Ant 极角排序(叉积的应用)

    题目大意:给出n个点的编号和坐标,按逆时针方向连接着n个点,按连接的先后顺序输出每个点的编号. 题目思路:Cross(a,b)表示a,b的叉积,若小于0:a在b的逆时针方向,若大于0a在b的顺时针方向 ...

  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. L3-021 神坛(极角排序求三角形最小面积)

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

  8. bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序

    Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她 ...

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

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

最新文章

  1. golang 遍历list_golang如何把一个list遍历给一个切片
  2. wav2midi 音乐旋律提取算法 附可执行demo
  3. 本周Java技巧#7 – Maven慢吗?
  4. 利用openssl来计算sha256哈希值
  5. java if (name!=null name!=),java中的NullPointerException异常
  6. 有没有一个永久储存数据的地方?
  7. plsql导出表结构_mysqldump命令详解 Part 5-按条件备份表数据
  8. Coinbase在上市前选择在Reddit线上路演
  9. html页面之间传表格,如何在html 页面插入一个表格,参数的传递,
  10. Html 5 网络存储之 LocalStorage、SessionStorage
  11. Palindrome - URAL - 1297(求回文串)
  12. mysql查找数据库文件位置
  13. 希尔伯特(Hilbert)空间和巴拿赫(Banach)空间
  14. 使用dll查看器dll文件中的内容
  15. 典型飞行控制系统的回路构成
  16. 无所不在的嵌入式系统
  17. 盲盒是怎么赚钱的(拆解盲盒App背后的盈利逻辑)
  18. 有效沟通bic法则_善用BIC法则,负面回馈不怕引起反弹!
  19. pymol怎么做底物口袋表面_pymol常用操作
  20. 【微信小程序】用户授权以及判断登录是否过期的方法

热门文章

  1. 高一计算机组装,高中生计算机组装与维护,呼市新华互联网学校
  2. RocketMQ中的Topic和JMS的queue有什么区别?
  3. 锁的释放流程-ReentrantLock.unlock
  4. Spring IoC容器管理的Bean能够被垃圾回收吗?
  5. 反射练习之越过泛型检查
  6. war包发布找不见路径 weblogic getResource 与getRealPath
  7. POI文件导入:代码实现-解析Excel构造用户列表
  8. DataURL:概述
  9. 单例模式源码分析(jdk+spring+mybatis)
  10. Session的底层实现原理