hrbustoj 1318:蛋疼的蚂蚁(计算几何,凸包变种,叉积应用)
蛋疼的蚂蚁
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=;
for(i=;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[]={}; //记录走过了没有
isw[cur] = true;
printf(" %d",cur); //输出第一个点
while(){
int next;
for(i=;i<=n;i++){ //假设下一个点
if(!isw[i])
break;
}
next = i;
if(i>n) //如果都被访问过,循环结束
break;
for(i=;i<=n;i++){
if(!isw[i] && i!=next && Cross(p[cur],p[next],p[i])>)
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[];
int i;
for(i=;i<=n;i++) //输入点集
scanf("%d%lf%lf",&i,&p[i].x,&p[i].y);
findway(p,n);
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hrbustoj 1318:蛋疼的蚂蚁(计算几何,凸包变种,叉积应用)的更多相关文章
- poj 1696:Space Ant(计算几何,凸包变种,极角排序)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2876 Accepted: 1839 Descrip ...
- 计算几何---凸包问题(Graham/Andrew Scan )
概念 凸包(Convex Hull)是一个计算几何(图形学)中的概念.用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有点的.严谨的定义和相关概念参 ...
- 计算几何-凸包-toleft test
toLeftTest toLeftTest是判断一个点是否在有向直线左侧的算法. 当点s位于向量pq左侧时,toLeftTest返回true.当点s位于向量pq右侧时,toLeftTest返回fals ...
- 计算几何-凸包算法 Python实现与Matlab动画演示
凸包算法是计算几何中的最经典问题之一了.给定一个点集,计算其凸包.凸包是什么就不罗嗦了 本文给出了<计算几何——算法与应用>中一书所列凸包算法的Python实现和Matlab实现,并给出了 ...
- 【BZOJ-1069】最大土地面积 计算几何 + 凸包 + 旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2707 Solved: 1053[Submit][Sta ...
- uva 10652 Board Wrapping (计算几何-凸包)
Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The sma ...
- Codeforces 1045E. Ancient civilizations 构造 计算几何 凸包
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1045E.html 4K码量构造题,CF血腥残暴! 题解 首先,如果所有点颜色相同,那么直接连个菊花搞定. ...
- 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...
- POJ3348 Cows 计算几何 凸包
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ3348 题意概括 求凸包面积(答案÷50) 题解 凸包裸题. 代码 #include <cstr ...
随机推荐
- ubuntu建立软ap共享无线网络
建立ad-hoc模式共享网络 viewtopic.php?f=116&t=387194 有些android手机可能不支持ad-hoc模式,要第三方rom才行. 首先安装这些工具 代码: apt ...
- webqq协议分析之~~~~验证是否需要验证码
对于小黄鸡我想大家(喜欢在群里bb的人...)肯定一点都不陌生,那段时间大家在群里对小鸡是各种调戏啊,都有点不忍直视.那时我便想能不能自己也做个呢,后来想想还是算了吧,自己技术太渣渣,然后就不了了之. ...
- 加解密(校验哈希值、MD5值)
1.计算文本哈希值: public static string ComputeHash(string password) { byte[] buffer = System.Text.Encoding. ...
- 【Android UI设计与开发】使用ViewPager实现欢迎引导页面
一.实现的效果图 每次看别人的代码前,必需要先看实现的效果图达到了一个什么样的效果,是不是跟自己想要实现的效果类似.有图才有真相嘛,同一时候,最下方有源代码的下载地址,差点儿源代码的每一行都有凝视,写 ...
- 将SVM用于多类分类
转自:http://www.lining0806.com/%E5%B0%86svm%E7%94%A8%E4%BA%8E%E5%A4%9A%E7%B1%BB%E5%88%86%E7%B1%BB/ SVM ...
- Android四大组件全然解析(一)---Activity
本文參考\android\android\frameworks\base\core\java\android\app\Activity.java文件里的类凝视.以及android/frameworks ...
- 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity
文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...
- 【转】Linux中多线程wait使用注意
使用管道生成的while,是无法进行并发管理的 在处理日志的时候,采用管道多线程,怎么都实现不了wait功能,经上篇文章才知道,使用管道生成的while,无法进行并发管理. while read qu ...
- FreeRTOS 定时器组
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 支持的定时器组,或者叫软件定时器,又或者叫用户定时器均可.软件定时器的功 ...
- DOM方法 getElementsByName()方法
http://www.imooc.com/code/1583 getElementsByName()方法 返回带有指定名称的节点对象的集合. 语法: document.getElementsByNam ...