题目大意:

不能向左拐 不能重复走

就是求一个螺旋凸包

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

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

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

#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. element中的tree组件实现菜单分配

    返回的菜单数据 tree组件的使用 <el-tree ref="menuList" // :data="menuList" // 展示数据 :props= ...

  2. 为什么要使用动态链接库(DLL)

    为什么要使用动态链接库(DLL)   第一章 为什么要使用动态链接库(DLL) top 提起DLL您一定不会陌生,在Windows中有着大量的以DLL为后缀的文件,它们是保证Windows正常运行和维 ...

  3. thinkphp 表单合法性检测

    在处理表单提交的数据的时候,建议尽量采用Think\Model类提供的create方法首先进行数据创建,然后再写入数据库. 大理石平台厂家 create方法在创建数据的同时,可以进行更为安全的处理操作 ...

  4. 关于C++里set_intersection(取集合交集)、set_union(取集合并集)、set_difference(取集合差集)等函数的使用总结

    文章转载自https://blog.csdn.net/zangker/article/details/22984803 set里面有set_intersection(取集合交集).set_union( ...

  5. 杂项-Class:Class

    ylbtech-杂项-Class:Class 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://y ...

  6. [转]C++的Json解析库:jsoncpp和boost

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...

  7. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\andro ...

  8. 【2018ACM/ICPC网络赛】焦作赛区

    A Magic Mirror 题目链接:https://nanti.jisuanke.com/t/31710 题意:输入字符串,如果是“Jessy”就输出“Good Guy!",否则输出“D ...

  9. springcloud(十六):服务网关 zuul 快速入门

    服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...

  10. spark 变量使用 broadcast、accumulator

    broadcast 官方文档描述: Broadcast a read-only variable to the cluster, returning a [[org.apache.spark.broa ...