poj1696 Space Ant【计算几何】
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 5334 | Accepted: 3312 |
Description
- It can not turn right due to its special body structure.
- It leaves a red path while walking.
- 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
Output
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【计算几何】的更多相关文章
- poj1696 Space Ant
地址: 题目: Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4295 Accepted: 2697 ...
- POJ-1696 Space Ant 凸包版花式水过!
Space Ant 明天早上最后一科毛概了,竟然毫无复习之意,沉迷刷题无法自拔~~ 题意:说实 ...
- poj 1696:Space Ant(计算几何,凸包变种,极角排序)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2876 Accepted: 1839 Descrip ...
- poj 1696 Space Ant (极角排序)
链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
- POJ 1696 Space Ant(极角排序)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2489 Accepted: 1567 Descrip ...
- poj 1696 Space Ant(模拟+叉积)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3840 Accepted: 2397 Descrip ...
- POJ 1696 Space Ant 卷包裹法
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3316 Accepted: 2118 Descrip ...
- POJ 1696 Space Ant(点积的应用)
Space Ant 大意:有一仅仅蚂蚁,每次都仅仅向当前方向的左边走,问蚂蚁走遍全部的点的顺序输出.開始的点是纵坐标最小的那个点,開始的方向是開始点的x轴正方向. 思路:从開始点開始,每次找剩下的点中 ...
- Space Ant
Space Ant The most exciting space discovery occurred at the end of the 20th century. In 1999, scient ...
随机推荐
- apache 配置会话保持
1.修改apache_home/conf/httpd.conf,增加以下模块(取消注释,如有其他依赖, 则相应取消注释) LoadModule proxy_module modules/mod_pro ...
- 5 -- Hibernate的基本用法 --4 3 JDBC连接属性
Hibernate需要进行数据库访问,因此必须设置连接数据库的相关属性.所有Hibernate属性的名字和语义都在org.hibernate.cfg.Environment中定义. 关于JDBC连接配 ...
- spray json, jackson 转到type时多key和少key的比较
有组合关系的三个class定义 A { B { C {...} ... } ... } 每个class都有loadFromJson和writeAsJson方法.过去几年,三个class里的成员变量一直 ...
- 【RF库XML测试】测试的XML文件说明
文件存放路径:C:\workspace\robotframework\test_rf_api\testdata\XML.xml 文件内容: <example> <first id=& ...
- Python学习--字符串slicing
Found this great table at http://wiki.python.org/moin/MovingToPythonFromOtherLanguages Python indexe ...
- 带有ZLIB_LIBRARY_DEBUG的FindZLIB.cmake文件
CMake自带的FindZLIB.cmake只有ZLIB_LIBRARY,而没有ZLIB_LIBRARY_DEBUG 将下面的代码保存成FindZLIB.cmake,替换掉D:\Program Fil ...
- adb(android debug bridge)命令
adb(android debug bridge) adb devices --查看当前连接的模拟器/设备 adb remount --模拟器/设备重新启动,保证能用 adb push src des ...
- 决策树归纳算法之C4.5
前面学习了ID3,知道了有关“熵”以及“信息增益”的概念之后. 今天,来学习一下C4.5.都说C4.5是ID3的改进版,那么,ID3到底哪些地方做的不好?C4.5又是如何改进的呢? 在此,引用一下前人 ...
- 自己实现atoi
bool myatoi(const char *s,int &num) { cout<<(&s)<<endl; num=; while (*s) { ') { ...
- 删除RHSA文件方法
DEL /F /A /Q \\?\%1RD /S /Q \\?\%1新建一个批处理文件,包含上面两行代码,然后将要删除的文件拖放进里面就OK!