hrbustoj 1318:蛋疼的蚂蚁(计算几何,凸包变种,叉积应用)
2014-04-05 23:05
239 查看
蛋疼的蚂蚁
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 39(22 users) Total Accepted: 26(21 users) Rating:
Special Judge: No
Description
大千世界无奇不有,最近科学家发现一种蚂蚁,它头部只有一只左眼,并且
三只脚在身子的右侧,因此:1,它不能转向右侧。2,它的行走会留下一条红印。3,它行走不会在经过以前
走过的红印。
这种蚂蚁需要每天吃一个食物,这个食物坐落在平面坐标系中,没有两个植物会在同一点。蚂蚁一天会找到一个食物,然后它就在那里
过完一天,第二天它会再出发寻找食物。问题是寻找一条道路让蚂蚁活的时间最长。
蚂蚁的起始点从y坐标最小开始,如果y相同则x最小起。
Input
首先输入测试的组数m,(1<=m<=10).对于每组首先输入n,代表植物的个数(1<=n<=50)
然后n 行是每个植物的数据。每行有三个整数组成,第一个数是惟一的序号(1...n),然后跟着两个整数x,y代表植物的坐标位置。
序号是按升序给出来的。假设坐标系最大是100.
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
Hint
计算几何
Source
2012 Spring Contest 4 - Search Technology
Author
鲁学涛
计算几何,凸包变种,叉积应用。
这道题是 poj1696(分析见poj 1696:Space Ant(计算几何,凸包变种,极角排序))的中文版,重新练习了一下叉积的应用,感觉更条理了。
代码:
Freecode : www.cnblogs.com/yym2013
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 39(22 users) Total Accepted: 26(21 users) Rating:
Special Judge: No
Description
大千世界无奇不有,最近科学家发现一种蚂蚁,它头部只有一只左眼,并且
三只脚在身子的右侧,因此:1,它不能转向右侧。2,它的行走会留下一条红印。3,它行走不会在经过以前
走过的红印。
这种蚂蚁需要每天吃一个食物,这个食物坐落在平面坐标系中,没有两个植物会在同一点。蚂蚁一天会找到一个食物,然后它就在那里
过完一天,第二天它会再出发寻找食物。问题是寻找一条道路让蚂蚁活的时间最长。
蚂蚁的起始点从y坐标最小开始,如果y相同则x最小起。
Input
首先输入测试的组数m,(1<=m<=10).对于每组首先输入n,代表植物的个数(1<=n<=50)
然后n 行是每个植物的数据。每行有三个整数组成,第一个数是惟一的序号(1...n),然后跟着两个整数x,y代表植物的坐标位置。
序号是按升序给出来的。假设坐标系最大是100.
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
Hint
计算几何
Source
2012 Spring Contest 4 - Search Technology
Author
鲁学涛
计算几何,凸包变种,叉积应用。
这道题是 poj1696(分析见poj 1696:Space Ant(计算几何,凸包变种,极角排序))的中文版,重新练习了一下叉积的应用,感觉更条理了。
代码:
#include <stdio.h> #include <cmath> #define eps 1e-10 typedef struct { double x,y; }Point; double Cross(Point a,Point b,Point c) //求叉积 { return (c.x-a.x)*(b.y-a.y)-(c.y-a.y)*(b.x-a.x); } void findway(Point p[],int n) { printf("%d",n); //输出点数 //找到开始的点 int i,cur=1; for(i=2;i<=n;i++){ if(fabs(p[i].y-p[cur].y)<eps){ //相等 if(p[i].x < p[cur].x) cur = i; } else if(p[i].y < p[cur].y) //小于 cur = i; } //开始找路,始终找最右边的路 bool isw[51]={0}; //记录走过了没有 isw[cur] = true; printf(" %d",cur); //输出第一个点 while(1){ int next; for(i=1;i<=n;i++){ //假设下一个点 if(!isw[i]) break; } next = i; if(i>n) //如果都被访问过,循环结束 break; for(i=1;i<=n;i++){ if(!isw[i] && i!=next && Cross(p[cur],p[next],p[i])>0) next = i; } cur = next; isw[cur] = true; printf(" %d",cur); //输出当前确定的点 } printf("\n"); return ; } int main() { int m,n; scanf("%d",&m); while(m--){ scanf("%d",&n); Point p[51]; int i; for(i=1;i<=n;i++) //输入点集 scanf("%d%lf%lf",&i,&p[i].x,&p[i].y); findway(p,n); } return 0; }
Freecode : www.cnblogs.com/yym2013
相关文章推荐
- 排序中文POJ 1696/hrbustoj 1318 几何 蛋疼的蚂蚁
- 计算几何(一):叉积的简单应用
- poj 1696:Space Ant(计算几何,凸包变种,极角排序)
- 计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)
- 计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)
- POJ2318---TOYS (基础计算几何:叉积应用)
- 计算几何算法基础————判断点是否在线段上(另附叉积的重要应用,折线段的拐向判断)
- Pipe--计算几何叉积的应用
- 计算几何之叉积(外积)得应用
- POJ 1696 Space Ant 计算几何 叉积的应用
- 计算几何入门题#1(点,线基本关系,点积叉积的理解)
- poj1039 计算几何-交点,叉积
- hdoj 4946 计算几何求凸包
- 计算几何入门 6:凸包的构造——Graham Scan算法
- 【计算几何初步-凸包-Jarvis步进法。】【HDU1392】Surround the Trees
- 【计算几何】【凸包】Atcoder 3868 Holes
- CodeVS1298 凸包周长 解题报告【计算几何】【凸包】
- hihocoder 1582 : Territorial Dispute (计算几何 凸包)(2017 北京网络赛E)
- ACM-ICPC(2017)北京赛区网络赛-E-Territorial Dispute(计算几何->凸包)
- POJ 1113(计算几何初步——凸包加圆周长)