题意:

一只特别的蚂蚁,只能直走或者左转。在一个平面上,有很多株植物,这只蚂蚁每天需要进食一株,这只蚂蚁从起点为(0,miny)的点开始出发。求最多能活多少天

分析:

肯定是可以吃到所有植物的,以当前方向无限延长成直线,可以剩余的植物都在直线的左边。所以就是求上一个位置到当前位置与下一个位置与当前位置的夹角,并且使夹角最大。

cos(0~pi)是单调递减的,夹角越大,cos值越小。所以我用点积来计算。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define eps 1e-8
#define INF 1e9
using namespace std; const int maxn=100; typedef struct Point
{
double x,y;
Point() {};
Point(double xx,double yy)
{
x=xx;
y=yy;
}
} Vector; double crs_prdct(Vector a,Vector b)
{
return a.x*b.y-b.x*a.y;
} double dot_prdct(Vector a,Vector b)
{
return a.x*b.x+a.y*b.y;
} Vector operator - (Point a,Point b)
{
return Vector(a.x-b.x,a.y-b.y);
} double dist(Vector v)
{
return sqrt(v.x*v.x+v.y*v.y);
} double dist(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} Point pot[maxn];
bool vis[maxn]; int main()
{
// freopen("in.txt","r",stdin);
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int idx;
double x,y;
int minp=1;
for(int i=1; i<=n; i++)
{
scanf("%d%lf%lf",&idx,&x,&y);
pot[i]=Point(x,y);
if(y==pot[minp].y) minp=x<pot[minp].x? i:minp;
if(y<pot[minp].y) minp=i;
}
pot[0]=Point(0,pot[minp].y);
memset(vis,0,sizeof(vis));
int last=0,now=minp;
printf("%d %d",n,now);
vis[now]=1;
for(int i=2; i<=n; i++)
{
int next;
Vector now_v=Vector(pot[last]-pot[now]);
double cosA=INF;
for(int j=1; j<=n; j++)
{
if(vis[j]) continue;
Vector next_v=Vector(pot[j]-pot[now]);
double cosB=dot_prdct(now_v,next_v)/dist(now_v)/dist(next_v);
if(cosB<cosA)
{
cosA=cosB;
next=j;
}
}
printf(" %d",next);
vis[next]=1;
last=now;
now=next;
}
puts("");
}
return 0;
}

POJ 1696 Space Ant 点积计算夹角的更多相关文章

  1. poj 1696 Space Ant (极角排序)

    链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  2. POJ 1696 Space Ant(点积的应用)

    Space Ant 大意:有一仅仅蚂蚁,每次都仅仅向当前方向的左边走,问蚂蚁走遍全部的点的顺序输出.開始的点是纵坐标最小的那个点,開始的方向是開始点的x轴正方向. 思路:从開始点開始,每次找剩下的点中 ...

  3. POJ 1696 Space Ant(极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2489   Accepted: 1567 Descrip ...

  4. poj 1696 Space Ant(模拟+叉积)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3840   Accepted: 2397 Descrip ...

  5. POJ 1696 Space Ant 卷包裹法

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3316   Accepted: 2118 Descrip ...

  6. 2018.07.04 POJ 1696 Space Ant(凸包卷包裹)

    Space Ant Time Limit: 1000MS Memory Limit: 10000K Description The most exciting space discovery occu ...

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

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

  8. POJ 1696 Space Ant --枚举,模拟,贪心,几何

    题意: 有很多点,从最右下角的点开始走起,初始方向水平向右,然后以后每步只能向左边走,问最多能走多少个点. 解法: 贪心的搞的话,肯定每次选左边的与它夹角最小的点,然后走过去. 然后就是相当于模拟地去 ...

  9. POJ 1696 - Space Ant 凸包的变形

    Technorati Tags: POJ,计算几何,凸包 初学计算几何,引入polygon后的第一个挑战--凸包 此题可用凸包算法做,只要把压入凸包的点从原集合中排除即可,最终形成图形为螺旋线. 关于 ...

随机推荐

  1. Ubuntu编译安装TrinityCore3.3.5

    系统:Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-32-generic x86_64) 1核2G Notice:内存不可过小,否则会编译失败 #安装一堆东西 4 apt- ...

  2. Hive 配置项详解

    hive.ddl.output.format: hive的ddl语句的输出格式, 默认是text,纯文本,还有json格式,这个是0.90以后才出的新配置: hive.exec.script.wrap ...

  3. C++知识点案例 笔记-1

    1.重载函数 2.内联函数 3.New.Delete 4.重载与.const形参 5.常数据成员 6.静态成员函数 ==重载函数== #include <iostream> using n ...

  4. 037.Python的UDP语法

    UDP语法 1 创建一个socket的UDP对象 import socket #创建对象 socket.SOCK_DGRAM 代表UDP协议 sk = socket.socket(type=socke ...

  5. 11.6 mpstat:CPU信息统计

        mpstat 是Multiprocessor Statistics的缩写,是一种实时系统监控工具.mpstat命令会输出CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CP ...

  6. sizeof()用法汇总-(转自风雷)

    sizeof()功能:计算数据空间的字节数 1.与strlen()比较       strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素.     ...

  7. Django(39)使用redis配置缓存

    前言   动态网站的基本权衡是,它们是动态的.每次用户请求页面时,Web服务器都会进行各种计算 - 从数据库查询到模板呈现再到业务逻辑 - 以创建站点访问者看到的页面.从处理开销的角度来看,这比标准的 ...

  8. Go语言web开发---Beego的session

    一.简介 Session是一段保存在服务器上的信息,当客户端第一次访问服务器时创建Session,同时也会创建一个名为beegosessionID,值为创建的Session的id的Cookie. 这个 ...

  9. cmodel模拟器开发

    cmodel模拟器开发 对于一个公司来说,产品的设计周期就是生命线,一般来说都会在设计功能级仿真的c-model后直接转向RTL设计. 在目前的技术下,做cycle-by-cycle的设计和直接RTL ...

  10. Camera HDR Algorithms

    Camera HDR Algorithms HDRI是High-Dynamic Range(HDR)image的缩写,也就是高动态范围图像.它就是为了解决更好的存储高动态范围图像这个问题而发明出来的. ...