含极角序排序模板。
 
Space Ant
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 5334   Accepted: 3312

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

题意:

给定n个点,一只蚂蚁只能按逆时针方向走。问最多走多少点,已经走的顺序。

思路:

很显然每次选的都是极角序最小的。

所以每走一个点就按极角序排个序,选最近的。排序的时候前面走过的就不用走了。

第一次要swap,之后就不用了,因为一定程度已经有序了。每次正好选的都是下一个。

很多地方说的凸包,好吧我没想出来怎么就凸包了.....【太菜了】

 #include <iostream>
#include <set>
#include <cmath>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
//#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define inf 0x7f7f7f7f int n, m, now;
const int maxn = ;
struct node{
int x, y, id;
}point[maxn];
int xmult(int x1, int y1, int x2, int y2, int x3, int y3)
{
return (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1);
} int distance(node p1, node p2)
{
return (p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y);
} void swap(node &a, node &b)
{
node t = a;
a = b;
b = t;
} bool cmp (const node& a, const node& b)
{
int k = xmult(point[now].x, point[now].y, a.x, a.y, b.x, b.y);
if(k > ){
return ;
}
else if(k == ){
if( abs(point[now].x-a.x)<abs(point[now].x-b.x) )
return ;
if( abs(point[now].y-a.y)<abs(point[now].y-b.y) )
return ;
}
return ;
} int order[maxn];
bool vis[maxn];
int main()
{
scanf("%d", &m);
while(m--){
scanf("%d", &n);
now = ;
memset(vis, , sizeof(vis));
for(int i = ; i <= n; i++){
scanf("%d%d%d", &point[i].id, &point[i].x, &point[i].y);
//point[i].id = i;
if(point[i].y < point[now].y){
swap(point[now], point[i]);
}
} int cnt = ;
order[cnt] = point[now].id;
//vis[mid] = true;
while(cnt < n){
//node now = point[order[cnt]];
//swap(point[order[cnt]], point[1]);
//point[0] = point[order[cnt]];
sort(point + now + , point + n + , cmp);
order[++cnt] = point[++now].id;
} printf("%d", n);
for(int i = ; i <= cnt; i++){
printf(" %d", order[i]);
}
printf("\n");
}
return ;
}

poj1696 Space Ant【计算几何】的更多相关文章

  1. poj1696 Space Ant

    地址: 题目: Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4295   Accepted: 2697 ...

  2. POJ-1696 Space Ant 凸包版花式水过!

                                                         Space Ant 明天早上最后一科毛概了,竟然毫无复习之意,沉迷刷题无法自拔~~ 题意:说实 ...

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

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

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

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

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

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

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

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

  7. POJ 1696 Space Ant 卷包裹法

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

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

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

  9. Space Ant

    Space Ant The most exciting space discovery occurred at the end of the 20th century. In 1999, scient ...

随机推荐

  1. -webkit-user-select

    -webkit-user-select: none;//不可选 -webkit-user-select: auto; //可复制

  2. 几个实用的sublime text 2的快捷键

    Sublime text快捷键 Sublime text 2是一款轻量.简洁.高效.跨平台的编辑器,他适合编写javascript,html,css,php,paython等等, 作为程序员,编码效率 ...

  3. headless webkit(无界面浏览器、爬虫)

    phantomjs / puppeteer https://github.com/amir20/phantomjs-node https://github.com/GoogleChrome/puppe ...

  4. PyCharm 基础设置

    设置主题:File -- Settings -- Editor -- Color & Fonts -- Font -- Scheme 设置为 Darcula 设置字体:File -- Sett ...

  5. 基于Elasticsearch 5.4.3的商品搜索系统

    源码已提交至http://github.com

  6. Ubuntu输入法切换问题

    不知道改了个什么东西,Ubuntu 15.04 中Ctrl+Space不能切换输入法了,因此不能输入英文,shell就更是没法工作,在设置里面找了好久,“文本输入”/“语言支持”/“键盘”里面都没找到 ...

  7. windows下dump文件调试

    dump调试:在系统中异常或者崩溃的时候,来生成dump文件,然后用调试器来调试.这样就可以在生产环境中的dmp文件,拷贝到自己的开发机器上,调试就可以找到错误的位置,配合程序调试符号pdb文件,直接 ...

  8. angular-file-upload+struts的使用

    参考帖子 http://www.cnblogs.com/wangzun/p/6099884.html http://www.cnblogs.com/highriver/archive/2011/06/ ...

  9. 安装ahci驱动后出现A disk read error occurred如何解决

    注意:因为一般的ghost系统盘都没有ahci驱动,所以,如果用到固态硬盘且想更好的发挥固态硬盘的性能,需要安装ahci驱动,且在bios 中把硬盘模式设置成ahci(否则电脑会蓝屏或进不去系统) 步 ...

  10. 保存对象时碰到的问题-列名 'Discriminator' 无效

    今天保存对象时碰到问题: {"列名 'Discriminator' 无效.\r\n列名 'Discriminator' 无效."}  百度了一下,百度找到的一个解决: http:/ ...