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. ubuntu kylin 13.10 无法安装ia32-libs解决方案

    1.安装 Synaptic 2.sudo apt-get install synaptic 3.进入synaptic ,设置->软件库 4.点击  其他软件->添加 5.输入“deb ht ...

  2. PHP开发基础视频教程

    PHP现今作为互联网运用很广泛的编程语言,市场需求量也越来越高,而PHP开发工程师的薪资也是一路水涨船高,更多的人看到了PHP的发展前景,纷纷都想投入到PHP的开发大军中来,那么对于很多转行或者零基础 ...

  3. Grid Infrastructure 启动的五大问题 (文档 ID 1526147.1)

    适用于: Oracle Database - Enterprise Edition - 版本 11.2.0.1 和更高版本本文档所含信息适用于所有平台 用途 本文档的目的是总结可能阻止 Grid In ...

  4. stringstream clear与str("")的问题

    一.str与clear函数 C++Reference对于两者的解释: 可见:clear()用来设置错误状态,相当于状态的重置:str用来获取或预置内容 二.区别 运行下面测试代码: #include& ...

  5. 【C语言项目】贪吃蛇游戏(下)

    目录 00. 目录 07. 游戏逻辑 7.5 按下ESC键结束游戏 7.6 判断是否撞到墙 7.7 判断是否咬到自己 08. 游戏失败界面设计 8.1 游戏失败界面边框设计 8.2 撞墙失败界面 8. ...

  6. rocketmq 命令示例

    http://www.360doc.com/content/16/0111/17/1073512_527143896.shtml http://www.cnblogs.com/marcotan/p/4 ...

  7. MAC实现睡眠和休眠唤醒

    因为苹果默认为休眠文件加密,Clover 是无法解密的.所以需要经过一些设置才能破除这无节操的加密文件sleepimage.在这之前不得不提下EmuVariableUefi-64.efi 这个驱动.我 ...

  8. 使用Redis作为高速缓存

    Redis适合哪些业务场景常规业务系统的数据库访问中,读写操作的比例一般在7/3到9/1,也就是说读操作远多于写操作,因此高并发系统设计里,通过NoSQL技术将热点数据(短期内变动概率小的数据)放入内 ...

  9. 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski

    还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...

  10. IntelliJ IDEA 中自定义模板代码的缩写

    方法一:新建 Live Template step1. 点击 File – Setting step2.选择 Live Template,点击右侧的+号,选择 Template Group step3 ...