POJ - 1696 Space Ant(极角排序)
题目链接:点击查看
题目大意:现在有一只特殊的蚂蚁,它会按照以下规则尽可能长的寻找路径:
- 不能回头
- 不能右转
- 只能逆时针行走
现在给出n个点,输出最长的路径
题目分析:既然是逆时针旋转,那么每次只能走极角最小的一个,每次都排序找就可以了,时间复杂度是n*n*logn,极角排序的cmp函数还是用这张图
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;const double eps = 1e-8;int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}struct Point{double x,y;int id;Point(){}Point(double _x,double _y){x = _x;y = _y;}void input(){scanf("%d%lf%lf",&id,&x,&y);}bool operator < (Point b)const{return sgn(y-b.y)== 0?sgn(x-b.x)<0:y<b.y;}Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}//返回两点的距离double distance(Point p){return hypot(x-p.x,y-p.y);}
}point[N];double xmult(Point p0,Point p1,Point p2)
{return (p1-p0)^(p2-p0);
}int pos;bool cmp(Point a,Point b)
{double temp=xmult(point[pos],a,b);if(sgn(temp)==0)return a.distance(point[pos])<b.distance(point[pos]);return sgn(temp)>0;
}int main()
{
// freopen("input.txt","r",stdin);
// ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n;scanf("%d",&n);for(int i=0;i<n;i++){point[i].input();if(point[i]<point[0])swap(point[i],point[0]);}pos=0;for(int i=1;i<n;i++){sort(point+i,point+n,cmp);pos++;}printf("%d",n);for(int i=0;i<n;i++)printf(" %d",point[i].id);putchar('\n');}return 0;
}
POJ - 1696 Space Ant(极角排序)相关推荐
- POJ 1696 Space Ant 极角排序(叉积的应用)
题目大意:给出n个点的编号和坐标,按逆时针方向连接着n个点,按连接的先后顺序输出每个点的编号. 题目思路:Cross(a,b)表示a,b的叉积,若小于0:a在b的逆时针方向,若大于0a在b的顺时针方向 ...
- POJ 1696 Space Ant(极角排序)【计算几何】
ACM博客_kuangbin POJ 1696 Space Ant(极角排序) Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- poj 1696 Space Ant
大致题意: 一只蚂蚁,只会向左转,现在给出平面上很多个点,求解一种走法, 能使得蚂蚁能经过的点最多,每个顶点该蚂蚁只能经过一次,且所行走的路线不能发生交叉. 卷包裹法: 形象思维假想一根无限长的绳子, ...
- 简单几何(极角排序) POJ 2007 Scrambled Polygon
题目传送门 题意:裸的对原点的极角排序,凸包貌似不行. /************************************************ * Author :Running_Time ...
- 计算几何----极角排序
一.极角,极径,极轴,极点概念 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向). 对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r ...
- BZOJ 1132 [POI2008]Tro(极角排序)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1132 [题目大意] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和(N&l ...
- L3-021 神坛(极角排序求三角形最小面积)
在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...
- bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序
Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她 ...
- HihoCoder - 1879 Rikka with Triangles(极角排序求所有锐角三角形的面积)
题目链接:点击查看 题目大意:给出 n ( n <= 2000 ) 个点,求出所有不同的锐角三角形的面积 题目分析:n^3 暴力枚举肯定是不可以的,和之前写过的一个题目思路很像:HDU-5784 ...
最新文章
- golang 遍历list_golang如何把一个list遍历给一个切片
- wav2midi 音乐旋律提取算法 附可执行demo
- 本周Java技巧#7 – Maven慢吗?
- 利用openssl来计算sha256哈希值
- java if (name!=null name!=),java中的NullPointerException异常
- 有没有一个永久储存数据的地方?
- plsql导出表结构_mysqldump命令详解 Part 5-按条件备份表数据
- Coinbase在上市前选择在Reddit线上路演
- html页面之间传表格,如何在html 页面插入一个表格,参数的传递,
- Html 5 网络存储之 LocalStorage、SessionStorage
- Palindrome - URAL - 1297(求回文串)
- mysql查找数据库文件位置
- 希尔伯特(Hilbert)空间和巴拿赫(Banach)空间
- 使用dll查看器dll文件中的内容
- 典型飞行控制系统的回路构成
- 无所不在的嵌入式系统
- 盲盒是怎么赚钱的(拆解盲盒App背后的盈利逻辑)
- 有效沟通bic法则_善用BIC法则,负面回馈不怕引起反弹!
- pymol怎么做底物口袋表面_pymol常用操作
- 【微信小程序】用户授权以及判断登录是否过期的方法