POJ 1696 Space Ant(点积的应用)
大意:有一仅仅蚂蚁,每次都仅仅向当前方向的左边走,问蚂蚁走遍全部的点的顺序输出。開始的点是纵坐标最小的那个点,開始的方向是開始点的x轴正方向。
思路:从開始点開始,每次找剩下的点中与当前方向所形成的夹角最小的点,为下一个要走的点(好像就是犄角排序,我不是非常会),夹角就是用点积除以两个向量的距离,求一下acos值。
之前一直用叉积做,做了好久例子都没过,发现用错了。。。 题目挺好的,有助于理解点积与叉积
struct Point{
double x, y;
int id;
} P[55], Min; double dmult(Point p1, Point p2, Point p)
{
return (p1.x-p.x)*(p2.x-p.x)+(p1.y-p.y)*(p2.y-p.y);
} double Distance(Point a, Point b)
{
return sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
} int T;
int n;
bool vis[55]; void Solve()
{
scanf("%d", &T);
while(T--)
{
memset(vis, true, sizeof(vis));
scanf("%d", &n);
Min = (Point){INF, INF, INF};
for(int i = 1; i <= n; ++i)
{
scanf("%d%lf%lf", &P[i].id, &P[i].x, &P[i].y);
if(P[i].y < Min.y)
{
Min = P[i];
}
} vis[Min.id] = false;
Point Q = (Point){0, Min.y};
Point H = Min; printf("%d %d ", n, Min.id);
for(int i = 2; i <= n; ++i)
{
double Min_a = INF;
for(int j = 1; j <= n; ++j)
{
if(vis[P[j].id] == false) continue;
Point t;
t.x = P[j].x-(H.x-Q.x);
t.y = P[j].y-(H.y-Q.y);
double x = dmult(t, H, Q);
double a = acos(x/Distance(Q, H)/Distance(Q, t));
if(a < Min_a)
{
Min_a = a;
Min = P[j];
}
}
vis[Min.id] = false;
Q = H;
H = Min;
printf("%d", Min.id);
printf("%s", i==n?"\n":" ");
}
}
}
POJ 1696 Space Ant(点积的应用)的更多相关文章
- POJ 1696 Space Ant 点积计算夹角
题意: 一只特别的蚂蚁,只能直走或者左转.在一个平面上,有很多株植物,这只蚂蚁每天需要进食一株,这只蚂蚁从起点为(0,miny)的点开始出发.求最多能活多少天 分析: 肯定是可以吃到所有植物的,以当前 ...
- 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 ...
- 2018.07.04 POJ 1696 Space Ant(凸包卷包裹)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Description The most exciting space discovery occu ...
- poj 1696:Space Ant(计算几何,凸包变种,极角排序)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2876 Accepted: 1839 Descrip ...
- POJ 1696 - Space Ant 凸包的变形
Technorati Tags: POJ,计算几何,凸包 初学计算几何,引入polygon后的第一个挑战--凸包 此题可用凸包算法做,只要把压入凸包的点从原集合中排除即可,最终形成图形为螺旋线. 关于 ...
- 简单几何(凸包) POJ 1696 Space Ant
题目传送门 题意:一个蚂蚁一直往左边走,问最多能走多少步,且输出路径 分析:就是凸包的变形题,凸包性质,所有点都能走.从左下角开始走,不停排序.有点纠结,自己的凸包不能AC.待理解透凸包再来写.. 好 ...
随机推荐
- clear_logs.py修改
#!/usr/bin/env python#encoding=utf-8"""清空最后修改时间跑今天7天以前的所有文件"""#指定监控的路径 ...
- hdu 4707 搜索 目前做的最水的搜索
直接深搜 ,水啊 #include<cstdio> #include<cstring> #include<algorithm> using namespace s ...
- Swift - 项目部署配置(支持的系统,设备和状态条样式等)
点击项目,在General选项卡中的“Deployment Info”栏目中可以进行一些项目的配置 Deployment Target:支持的iOS SDK的最低版本 Device:所支持的设备(iP ...
- hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵
题意:给出一个n*n的矩阵,旋转每一圈数字,求出对角线可能的最大值,以及转到最大时的最小距离. 只要分析每一层就可以了,本来想用地址传递二维数组,发现行不通,改了一下就行了. 这里有个坑,比如: 1 ...
- ListView数据动态刷新
在Android开发中用到ListView时,经常遇到要更改ListView内容的情形,比如删除或增加ListView中显示的条目,这里给大家提供一下思路:不论ListView要显示的对象是什么(如: ...
- 原型链(__proto__)
前面详细的解释了new的几个步骤,其中随意带过了一下原型链的概念,如果细读那篇文章,基本对原型也能有所理解. 原型有两个关键属性,一个是 __proto__ 一个是 prototype ,了解了这两个 ...
- iOS8指纹识别TouchID
苹果在2014年6月3日的WWDC2014开幕式上推出了新版iOS8系统,界面上iOS8与iOS7相比变化不大,只是在功能方面进行了完好.iOS8通知中心更加强大,支持消息直接回复操作,并支持Quic ...
- DotNetBar怎样控制窗口样式
DotNetBar怎样控制窗口样式 老帅 在C#中使用控件DevComponents.DotNetBar时,怎样创建一个美丽的窗口.并控制窗口样式呢? 1.新建一个DotNetBar窗口 ...
- java之jvm学习笔记十三(jvm基本结构)
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...
- java学习笔记13--比较器(Comparable、Comparator)
java学习笔记13--比较器(Comparable.Comparator) 分类: JAVA 2013-05-20 23:20 3296人阅读 评论(0) 收藏 举报 Comparable接口的作用 ...