Space Ant

明天早上最后一科毛概了,竟然毫无复习之意,沉迷刷题无法自拔~~

题意:说实话没有仔细看,大概是一只右眼失明(只能左转)的蚂蚁每天要吃掉一个点的食物才能活下去,现在给出n个点的坐标,求蚂蚁最多能活多少天?

一看就是循环求凸包一直往里循环,数据只有50,这让我有勇气尝试一发。样例水过了却WA了三发。讨论区说的是用点积或者叉积,但我觉得循环凸包思路也行啊。吃饭的时候突然意识到我每次都是用未访问过的点找最坐下端的点排序,却疏漏了如果求最外层的凸包当然可以这样,但此题要循环求内层的凸包,所以外层用完标记然后把最后一个点作为起始点参考排序,回来改改A了。当然我知道是后台较水。。

struct node
{
int x,y,i;
} a[N],p[N];
int n,tot,len,ans[60],v[60];
double dis(node a,node b)
{
return hypot(a.x-b.x,a.y-b.y);
}
int multi(node p0,node p1,node p2)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int cmp(node p1,node p2)
{
int x=multi(p1,p2,a[0]);
if(x>0||(x==0&&dis(p1,a[0])<dis(p2,a[0]))) return 1;
return 0;
}
void Graham()
{
sort(a+1,a+n,cmp);//a[0]是上一轮最后一个点即本轮的出发点,以其作为参考来极角排序
tot=2,p[0]=a[0],p[1]=a[1];
for(int i=2; i<n; i++)
{
while(tot>1&&multi(a[i],p[tot-1],p[tot-2])>=0) tot--;
p[tot++]=a[i];
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(v,0,sizeof(v));
scanf("%d",&n);
for(int i=0; i<n; i++) scanf("%d%d%d",&a[i].i,&a[i].x,&a[i].y);
len=0;
int k=0;
for(int i=1; i<n; i++)
if((a[i].y<a[k].y||(a[i].y==a[k].y&&a[i].x<a[k].x))) k=i;//找到最左下角的;
swap(a[0],a[k]);
ans[len++]=a[0].i;
v[a[0].i]=1;
while(n>1)
{
Graham();//获取凸包上的点;
for(int i=1; i<tot; i++)//a[0]每次
{
ans[len++]=p[i].i;
v[p[i].i]=1;//已访问过
}
a[0]=p[tot-1];
int nn=0;
for(int i=0; i<n; i++) if(!v[a[i].i]) p[nn++]=a[i];//凸包内的点;
for(int i=0; i<nn; i++) a[i+1]=p[i];
n=nn+1;//加上a[0]共nn+1个点;
}
printf("%d",len);
for(int i=0; i<len; i++)
printf(" %d",ans[i]);
printf("\n");
}
return 0;
}

POJ-1696 Space Ant 凸包版花式水过!的更多相关文章

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

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

  2. poj 1696 Space Ant (极角排序)

    链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

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

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

  4. poj 1696:Space Ant(计算几何,凸包变种,极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2876   Accepted: 1839 Descrip ...

  5. POJ 1696 Space Ant 卷包裹法

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3316   Accepted: 2118 Descrip ...

  6. POJ 1696 Space Ant(极角排序)

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

  7. poj 1696 Space Ant(模拟+叉积)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3840   Accepted: 2397 Descrip ...

  8. POJ 1696 Space Ant(点积的应用)

    Space Ant 大意:有一仅仅蚂蚁,每次都仅仅向当前方向的左边走,问蚂蚁走遍全部的点的顺序输出.開始的点是纵坐标最小的那个点,開始的方向是開始点的x轴正方向. 思路:从開始点開始,每次找剩下的点中 ...

  9. POJ 1696 Space Ant(凸包变形)

    Description The most exciting space discovery occurred at the end of the 20th century. In 1999, scie ...

随机推荐

  1. LPCTSTR和CString的关系

    类型理解 LPCTSTR类型: L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都 ...

  2. Android 视频录制 java.lang.RuntimeException: start failed.

    //mRecorder.setVideoSize(320, 280); // mRecorder.setVideoFrameRate(5); mRecorder.setOutputFile(viodF ...

  3. Selenium私房菜系列6 -- 深入了解Selenium RC工作原理(1)

    前一篇已经比较详细讲述了如何使用Selenium RC进行Web测试,但到底Selenium RC是什么?或者它由哪几部分组成呢?? 一.Selenium RC的组成: 关于这个问题,我拿了官网上的一 ...

  4. NBUT 1115 Cirno's Trick (水)

    题意: 给出多个double数,去掉其最小的和最大的,再对余下的求均值. 思路: 再输入时将最大和最小去掉,顺便统计非最值的和,输出时除一下个数即可. #include <bits/stdc++ ...

  5. 机器学习之 PCA

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  6. KTU Programming Camp (Winter Training Day 1)

    A.B.C(By musashiheart) 0216个人赛前三道题解 E(By ggg) Gym - 100735E Restore H(by pipixia) Gym - 100735H

  7. WPF知识点全攻略07- 数据绑定(Binding)

    数据绑定是WPF不得不提,不得不会系列之一 数据绑定简言之,就是把数据源的数据绑定到目标对象的属性上.目标对象可以是承自DependencyProperty的任何可访问的属性或控件,目标属性必须为依赖 ...

  8. C02 信息存储与运算

    目录 计算机内存 常量和变量 数据类型 运算符 计算机内存管理 计算机内存 信息存储概述 使用程序进行开发时,需要存储各种信息,这时候就需要用到变量.由于信息类型不同,变量的类型也因此不尽相同. 同时 ...

  9. HTML5基础知识习题 一

    1. HTML5 之前的 HTML 版本是什么? 答: HTML 4.01 2. HTML5 的正确 doctype 是? 答: <!DOCTYPE html> 3. 在 HTML5 中, ...

  10. clover如何使用UEFI引导和EFI驱动选择

    EFI分区实际上是一个FAT格式的分区,不一定要是第一个分区,GPT磁盘下任何一个FAT文件格式的分区都可以用来放EFI引导文件.主板UEFI先默认引导你所设置的第一优先启动分区下的\EFI\boot ...