题目大意:

不能向左拐 不能重复走

就是求一个螺旋凸包

把已经是凸包内的点标记一下就行

因为凸包的性质 所有点都能走到

注意起点的选择 还有 反复求凸包的过程中边界的改变

#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 /// 凸包的更多相关文章

  1. Space Ant - POJ 1696 (凸包)

    题目大意:给一些散列点然后初始点是坐标最下面最左面的点,然后只能往左走,求出来最多可以经过多少个点,把序号输出出来.   分析:先求出来初始的点,然后不断排序找出来最近的凸点....复杂度是 n^2* ...

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

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

  3. poj 1873 凸包+枚举

    The Fortified Forest Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6198   Accepted: 1 ...

  4. poj 1113 凸包周长

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33888   Accepted: 11544 Descriptio ...

  5. poj 1696 叉积理解

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

  6. poj 1696 (计算几何基础)

    poj 1696 Space Ant 链接:http://poj.org/problem?id=1696 题意:在坐标轴上,给定n个点的 id 以及点的坐标(xi, yi),让你以最底端点开始,从右依 ...

  7. Poj 2187 凸包模板求解

    Poj 2187 凸包模板求解 传送门 由于整个点数是50000,而求凸包后的点也不会很多,因此直接套凸包之后两重循环即可求解 #include <queue> #include < ...

  8. 简单几何(凸包) POJ 1696 Space Ant

    题目传送门 题意:一个蚂蚁一直往左边走,问最多能走多少步,且输出路径 分析:就是凸包的变形题,凸包性质,所有点都能走.从左下角开始走,不停排序.有点纠结,自己的凸包不能AC.待理解透凸包再来写.. 好 ...

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

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

随机推荐

  1. 【JZOJ6403】a

    description analysis 考虑\((0,0,0)\)走到某个点\((i,j,k)\)的贡献,相当于插板问题 \(i+j\)个空插\(k\)个板可以有空,\(i\)个空插\(j\)个板可 ...

  2. 单源最短路径问题2 (Dijkstra算法)

    用邻接矩阵 /* 单源最短路径问题2 (Dijkstra算法) 样例: 5 7 0 1 3 0 3 7 1 2 4 1 3 2 2 3 5 2 4 6 3 4 4 输出: [0, 3, 7, 5, 9 ...

  3. 云cassandra 重磅发布dynamodb特性

    云cassandra全新发布dynamodb特性 nosql主力数据库再上新台阶 9月阿里云cassandra产品发布,具体参考阿里云全球首发云Cassandra服务.迄今为止,已有上百大B客户开通了 ...

  4. 线段树区间离散化——牛客多校E

    这个区间离散化把我调死了.. 总之用vector来离散化,然后叶子节点维护的是一段区间,记录下每个叶子结点的起点+长度 千万要注意下标不能弄错! #include<bits/stdc++.h&g ...

  5. C++ 字符串的分割函数split 及 用法【转载】

    文章出处https://blog.csdn.net/glmushroom/article/details/80690881 之前在C#中总用到字符串的分割,使用系统函数即可,比如: string a ...

  6. Css实现Div在页面上垂直居中显示

    方法一 <html>    <head>        <title>垂直居中</title>        <style type=" ...

  7. 修改ActiveProcessLinks链表隐藏进程

    在Windows内核中有一个活动进程链表AcvtivePeorecssList.它是一个双向链表,保存着系统中所有进程的EPROCESS结构.特别地,进程的EPROCESS结构包含一个具有指针成员FL ...

  8. 接口(Interfaces)与反射(reflection) 如何利用字符串驱动不同的事件 动态地导入函数、模块

    标准库内部如何实现接口的 package main import ( "fmt" "io" "net/http" "os" ...

  9. (转)linux下装tomcat

    转载于:http://www.linuxidc.com/Linux/2016-11/136959.htm (linux社区) 1 tomcat介绍 Tomcat 是由 Apache Foundatio ...

  10. hexo next主题深度优化(七),cdn加速。

    文章目录 注: 正题: 免费cdn 收费cdn 个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io ...