ACM博客_kuangbin

POJ 1696 Space Ant(极角排序)

Space Ant

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 2489   Accepted: 1567

Description

The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists traced down an ant-like creature in the planet Y1999 and called it M11. It has only one eye on the left side of its head and just three feet all on the right side of its body and suffers from three walking limitations:

  1. It can not turn right due to its special body structure.
  2. It leaves a red path while walking.
  3. It hates to pass over a previously red colored path, and never does that.

The pictures transmitted by the Discovery space ship depicts that plants in the Y1999 grow in special points on the planet. Analysis of several thousands of the pictures have resulted in discovering a magic coordinate system governing the grow points of the plants. In this coordinate system with x and y axes, no two plants share the same x or y
An M11 needs to eat exactly one plant in each day to stay alive. When it eats one plant, it remains there for the rest of the day with no move. Next day, it looks for another plant to go there and eat it. If it can not reach any other plant it dies by the end of the day. Notice that it can reach a plant in any distance. 
The problem is to find a path for an M11 to let it live longest. 
Input is a set of (x, y) coordinates of plants. Suppose A with the coordinates (xA, yA) is the plant with the least y-coordinate. M11 starts from point (0,yA) heading towards plant A. Notice that the solution path should not cross itself and all of the turns should be counter-clockwise. Also note that the solution may visit more than two plants located on a same straight line.

Input

The first line of the input is M, the number of test cases to be solved (1 <= M <= 10). For each test case, the first line is N, the number of plants in that test case (1 <= N <= 50), followed by N lines for each plant data. Each plant data consists of three integers: the first number is the unique plant index (1..N), followed by two positive integers x and y representing the coordinates of the plant. Plants are sorted by the increasing order on their indices in the input file. Suppose that the values of coordinates are at most 100.

Output

Output should have one separate line for the solution of each test case. A solution is the number of plants on the solution path, followed by the indices of visiting plants in the path in the order of their visits.

Sample Input

2
10
1 4 5
2 9 8
3 5 9
4 1 7
5 3 2
6 6 3
7 10 10
8 8 1
9 2 4
10 7 6
14
1 6 11
2 11 9
3 8 7
4 12 8
5 9 20
6 3 2
7 1 6
8 2 13
9 15 1
10 14 17
11 13 19
12 5 18
13 7 3
14 10 16

Sample Output

10 8 7 3 4 9 5 6 2 1 10
14 9 10 11 5 12 8 7 6 13 4 14 1 3 2

Source

Tehran 1999

题意:
一只蚂蚁去吃菜,只能向左转弯,并且走过的路径会被标记,不能再走,问能吃到最多的卷心菜,输出吃菜顺序

思路:
这只蚂蚁可以像卷心菜那样一圈一圈的走,最后一定可以吃完n个卷心菜,接下来考虑先吃哪个点,肯定是先吃左下角的点,然后每次都选择拐角最小的点,就是每次以当前点为起点,对剩下的点进行极角坐标的排序;极角排序最简单的方法就是使用叉积

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
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 index;Point(){}Point(int _x,int _y){x=_x;   y=_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 dist(Point a,Point b)
{return sqrt((a-b)*(a-b));
}
int pos;
Point p[100];
bool cmp(Point a,Point b)
{double tmp=(a-p[pos])^(b-p[pos]);if(sgn(tmp)==0)return dist(p[pos],a)<dist(p[pos],b);else if(sgn(tmp)<0) return false;else    return true;
}
int main()
{int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d%lf%lf",&p[i].index,&p[i].x,&p[i].y);if(p[0].y>p[i].y||p[0].y==p[i].y&&p[0].x>p[i].x)swap(p[0],p[i]);}pos=0;for(int i=1;i<n;i++){sort(p+i,p+n,cmp);pos++;}printf("%d",n);for(int i=0;i<n;i++)printf(" %d",p[i].index);printf("\n");}return 0;
}

POJ 1696 Space Ant(极角排序)【计算几何】相关推荐

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

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

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

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

  3. poj 1696 Space Ant

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

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

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

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

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

  6. 【CCCC】L3-009 长城 (30分),计算几何+凸包,极角排序

    problem L3-009 长城 (30分) 正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应 ...

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

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

  8. L3-021 神坛(极角排序求三角形最小面积)

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

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

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

最新文章

  1. ue4 4.24启动无响应_UE4项目问题集合
  2. 中职计算机php学啥,计算机专业都学什么主要课程有什么_中职中专网
  3. Linux命令之ssh
  4. Unsupported format or combination of formats) Failed to parse onnx model
  5. lis3dh 三轴加速度计 运动检测 中断配置实现
  6. iOS Hacker obfuscator-llvm Xcode集成配置
  7. 我们如何使用CircleCI 2.0来构建Angular应用并将其部署到AWS S3
  8. Vue-touch的使用
  9. 计算机科学考试题目,附录A 计算机科学与技术学科综合考试人工智能真题
  10. apollo修改配置刷新bean_携程开源的分布式apollo技术整合springboot集成实现动态刷新配置
  11. 经典蓝色主题海报设计,永恒色彩趋势
  12. 04-07递归解法问题
  13. 百度编辑器复制微信图片无法保存
  14. [Mongodb]安装与启动
  15. 基于单片机的电子密码锁设计
  16. Vbox中Ubuntu和win7主机文件共享
  17. python颜色填充代码_python中如何给图形填充颜色
  18. SpringBoot 入参校验
  19. Caffe2 - (十三) 基于 Python 创建 Operator
  20. python历史波动率_【BSM模型】用实际市场数据计算隐含波动率并验证波动率微笑...

热门文章

  1. BZOJ2329: [HNOI2011]括号修复(Splay)
  2. datax调研及增量更新的思路
  3. ElasticSearch入门 第一篇:Windows下安装ElasticSearch
  4. eclipse官网下载详细指南
  5. .NET创建WebService服务简单的例子
  6. DB2数据库报 [SQL0805N Package NULLID.SQLLD003 was not found.]
  7. [z]如何在一台windows主机上安装多个mysql服务
  8. js中的错误missing ( before function parameter
  9. java虚拟机调用linux_Java虚拟机字节码执行引擎
  10. android studio failed to open zip file,Android Studio出现Failed to open zip file问题的解决方法...