POJ 1696 /// 凸包
题目大意:
不能向左拐 不能重复走
就是求一个螺旋凸包
把已经是凸包内的点标记一下就行
因为凸包的性质 所有点都能走到
注意起点的选择 还有 反复求凸包的过程中边界的改变
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std; const int N=;
const double eps=1e-;
double add(double a,double b) {
if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
return a+b;
}
struct P {
double x,y; int id;
P(){};
P(double _x,double _y,int _id):x(_x),y(_y),id(_id){}
P operator -(P p) {
return P(add(x,-p.x),add(y,-p.y),); };
P operator +(P p) {
return P(add(x,p.x),add(y,p.y),); };
P operator *(double d) {
return P(x*d,y*d,); };
double dot(P p) {
return add(x*p.x,y*p.y); };
double det(P p) {
return add(x*p.y,-y*p.x); };
}p[N], ans[N];
bool flag[N];
int n; bool cmp(P a,P b) {
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
void solve(int st) {
memset(flag,,sizeof(flag));
int k=, t=;
while(k<n) {
for(int i=st;i<n;i++)
if(flag[p[i].id]==) {
while(k>t && (ans[k-]-ans[k-]).det(p[i]-ans[k-])<=)
k--, flag[ans[k].id]=;
ans[k++]=p[i]; flag[p[i].id]=;
}
t=k;
for(int i=n-;i>=;i--)
if(flag[p[i].id]==) {
while(k>t && (ans[k-]-ans[k-]).det(p[i]-ans[k-])<=)
k--, flag[ans[k].id]=;
ans[k++]=p[i]; flag[p[i].id]=;
}
t=k; st=; // 注意边界的修改
}
} int main()
{
int t; scanf("%d",&t);
while(t--) {
scanf("%d",&n);
double miny=150.0;
for(int i=;i<n;i++) {
scanf("%d%lf%lf",&p[i].id,&p[i].x,&p[i].y);
miny=min(miny,p[i].y);
}
sort(p,p+n,cmp);
int t; /// 起点应该取最低的一点 即y最小的一点
for(int i=;i<n;i++)
if(p[i].y==miny) t=i;
solve(t);
printf("%d ",n);
for(int i=;i<n;i++)
printf("%d ",ans[i].id); printf("\n");
} return ;
}
POJ 1696 /// 凸包的更多相关文章
- Space Ant - POJ 1696 (凸包)
题目大意:给一些散列点然后初始点是坐标最下面最左面的点,然后只能往左走,求出来最多可以经过多少个点,把序号输出出来. 分析:先求出来初始的点,然后不断排序找出来最近的凸点....复杂度是 n^2* ...
- POJ 1696 - Space Ant 凸包的变形
Technorati Tags: POJ,计算几何,凸包 初学计算几何,引入polygon后的第一个挑战--凸包 此题可用凸包算法做,只要把压入凸包的点从原集合中排除即可,最终形成图形为螺旋线. 关于 ...
- poj 1873 凸包+枚举
The Fortified Forest Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6198 Accepted: 1 ...
- poj 1113 凸包周长
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33888 Accepted: 11544 Descriptio ...
- poj 1696 叉积理解
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3967 Accepted: 2489 Descrip ...
- poj 1696 (计算几何基础)
poj 1696 Space Ant 链接:http://poj.org/problem?id=1696 题意:在坐标轴上,给定n个点的 id 以及点的坐标(xi, yi),让你以最底端点开始,从右依 ...
- Poj 2187 凸包模板求解
Poj 2187 凸包模板求解 传送门 由于整个点数是50000,而求凸包后的点也不会很多,因此直接套凸包之后两重循环即可求解 #include <queue> #include < ...
- 简单几何(凸包) POJ 1696 Space Ant
题目传送门 题意:一个蚂蚁一直往左边走,问最多能走多少步,且输出路径 分析:就是凸包的变形题,凸包性质,所有点都能走.从左下角开始走,不停排序.有点纠结,自己的凸包不能AC.待理解透凸包再来写.. 好 ...
- 2018.07.04 POJ 1696 Space Ant(凸包卷包裹)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Description The most exciting space discovery occu ...
随机推荐
- Servlet - Tomcat服务器相关
1. 服务器 : 服务器其实就是代码编写的一个程序, 可以根据用户发送的请求, 调用执行对应的逻辑代码 2. Tomcat目录结构说明 : \bin : 存放启动和关闭Tomcat的可执行文件 \co ...
- Python查看对象属性的方法
帮助https://docs.python.org/2/library/functions.html dir() 函数 D:\pythontest>python Python (v3. , :: ...
- NX二次开发-UFUN编辑图层类别名字UF_LAYER_edit_category_name
NX11+VS2013 #include <uf.h> #include <uf_layer.h> UF_initialize(); //创建图层类别 UF_LAYER_cat ...
- Codeforces786B
传送门 n个节点且固定起点最短路,三种加边方法 1.u->v, 边权为w:2. u->[l, r], 边权为w:3. [l, r]->u, 边权为w AC_Code #include ...
- D 语言学习感受
胃抽动!特想吐!不过,还是很佩服写这种语言的人,不是大拿,怎么可能开发一门语言!
- Codeforces 1166B - All the Vowels Please
题目链接:http://codeforces.com/problemset/problem/1166/B 个元音. 思路:先判断能否弄出至少5*5的行列,然后按顺序填字符串就好了. AC代码: #in ...
- 8张图带你轻松温习Java知识
年初四好,一图胜千言,下面图解均来自Program Creek 网站,目前它们拥有最多的票选. 如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1 字符串不变性 下面这张图展示了这段代码做了 ...
- Hadoop安装成功之后,访问不了web界面的50070端口怎么解决?
Hadoop安装成功之后,访问不了web界面的50070端口 先查看端口是否启用 [hadoop@s128 sbin]$ netstat -ano |grep 50070 然后查看防火墙的状态,是否关 ...
- C++之运算符_算数运算符
运算符 **作用:**用于执行代码的运算 | **运算符类型** | **作用** || -------------- | -------------------------------------- ...
- 9-MySQL高级-主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除
推荐!! 各种情况都考虑在内,条理清楚!! https://blog.csdn.net/mbytes/article/details/86711508