蛋疼的蚂蚁

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:蛋疼的蚂蚁(计算几何,凸包变种,叉积应用)的更多相关文章

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

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

  2. 计算几何---凸包问题(Graham/Andrew Scan )

    概念 凸包(Convex Hull)是一个计算几何(图形学)中的概念.用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有点的.严谨的定义和相关概念参 ...

  3. 计算几何-凸包-toleft test

    toLeftTest toLeftTest是判断一个点是否在有向直线左侧的算法. 当点s位于向量pq左侧时,toLeftTest返回true.当点s位于向量pq右侧时,toLeftTest返回fals ...

  4. 计算几何-凸包算法 Python实现与Matlab动画演示

    凸包算法是计算几何中的最经典问题之一了.给定一个点集,计算其凸包.凸包是什么就不罗嗦了 本文给出了<计算几何——算法与应用>中一书所列凸包算法的Python实现和Matlab实现,并给出了 ...

  5. 【BZOJ-1069】最大土地面积 计算几何 + 凸包 + 旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2707  Solved: 1053[Submit][Sta ...

  6. uva 10652 Board Wrapping (计算几何-凸包)

    Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The sma ...

  7. Codeforces 1045E. Ancient civilizations 构造 计算几何 凸包

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1045E.html 4K码量构造题,CF血腥残暴! 题解 首先,如果所有点颜色相同,那么直接连个菊花搞定. ...

  8. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...

  9. POJ3348 Cows 计算几何 凸包

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ3348 题意概括 求凸包面积(答案÷50) 题解 凸包裸题. 代码 #include <cstr ...

随机推荐

  1. Linux 内核源码情景分析 chap 2 存储管理 (四)

    物理页面的使用和周转 1. 几个术语 1.1 虚存页面 指虚拟地址空间中一个固定大小, 边界与页面大小 4KB 对齐的区间及其内容 1.2 物理页面 与虚存页面相对的, 须要映射到某种物理存储介质上面 ...

  2. C# 通过form表单下载文本文件

    public void DownLoadConfigFile(string name) { //获取文件字符串内容 var data = _service.ReadFileStr(_configure ...

  3. tcp_handle_req: Made 4 read attempts but message is not complete yet - closing connection

    一.现象 测试opensips时遇到这么一个错误提示: ERROR:core:tcp_handle_req: Made read attempts but message is not complet ...

  4. effactive java读书小结1

    java程序设计的原则 1 清晰性和原则性最为重要:模块:任何可重用的软件组件,从单个方法到复杂系统都可以是一个模块.代码应该被重用而不是被拷贝.模块之间的依赖性应该降到最小:错误应尽早检查出来,最好 ...

  5. C函数返回字符串

    #include "stdio.h" #define KEY 5; int main() { char password[50] = "123456"; enc ...

  6. 微服务Spring Cloud与Kubernetes比较

    转 http://www.tuicool.com/articles/VnMf2y3 Spring Cloud或Kubernetes都宣称它们是开发运行微服务的最好环境,哪个更好?答案是两个都是,但他们 ...

  7. sql查看所有表大小的方法

    sql查看所有表大小的方法. 代码: declare @id int ) declare @pages int declare @dbname sysname ,) ,) ,) create tabl ...

  8. Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.

    Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript. 1. 现象::主程序卡住无反应,多行任务不往下执行 1 2. 原因::使用j ...

  9. Atitit. Dwr 抛出异常error解决方案

    Atitit. Dwr 抛出异常error解决方案 1. Dwr3的处理机制..setErrorHandler 1 2. remote Mteh  try catch 1 3. 林吧,子好java 处 ...

  10. vim列编辑模式快捷键

    vi/vim编辑器 多行行首插入   1 在多行行首插入,在nomal模式下按下ctrl+v,然后进行选择(如果想要选择至文件结尾,则再按G) 2 选择好以后按大写的I,则光标会自动跳转到所选择行的第 ...