题目大意:

不能向左拐 不能重复走

就是求一个螺旋凸包

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

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

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

#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. C# - *.dll vs *.lib (动态链接库 vs 静态链接库)

    静态库 库(Library)就是一段编译好的二进制代码,加上头文件就可以使用. 静态链接库(Windows 下的*.lib, Linux & Mac 下的 .a).之所以叫做静态,是因为静态库 ...

  2. Java——super关键字

    2.3 super关键字 ①super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象. ②super代表的是当前子类对象中的父类型特征. ③什么时候使用super? 类和父 ...

  3. Ruby 安装 – Unix

    Ruby 安装 - Unix 下面列出了在 Unix 机器上安装 Ruby 的步骤. 注意:在安装之前,请确保您有 root 权限. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 Ruby ...

  4. 微信小程序布局篇

    刚刚接触小程序,小程序与HTML5有一定的差别,小程序就几个标签,而HTML5一大堆标签,还不断更新,但是新增标签功能强大.做一下微信小程序的布局练练手.感觉还是挺不错的,也封装了很多东西功能出来,与 ...

  5. luoguP1134 阶乘问题 [数论]

    题目描述 也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001, ...

  6. 【历年真题】斐波那契数列logn做法

    描述 [题解] 用矩阵乘法加速递推 [0 1] [1 1] [f[n-1]] [f[n-2]] = [f[n-1]] [f[n]] 求A矩阵的n-2次幂然后再乘B矩阵. 结果矩阵中的第二行第一列就是f ...

  7. 扩展BSGS-传送门

    很好的讲解:ZigZagK 好的讲解:mjtcn 某个模板:here 模板题: BSGS:ZigZagK的poj2417 exBSGS:ZigZagK的poj3243 — AC_Gibson 一般的板 ...

  8. Python的变长参数

    Python的变长参数 def foo1(*args): for arg in args: print arg def foo2(**kargs): for key in kargs: print k ...

  9. centos7.2搭建kubernetes1.5.2+dashboard

    一.    简介 近来容器对企业来说已经不是什么陌生的概念,Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过 ...

  10. Unity NGUI 粒子的排序

    Unity NGUI系统中是没有对粒子进行排序的,如: 怎么解决这个问题呢? 思路是把粒子的渲染层级,相对于UI组件的层级进行一个偏移. 解决后的效果如下: 代码如下: using System.Co ...