HDU 4946 Area of Mushroom 凸包 第八次多校
题意:一大神有N个学生,各个都是小神,大神有个二次元空间,每一个小神都有一个初始坐标,如今大神把这些空间分给徒弟们,规则是假设这个地方有一个人比谁都先到这,那么这个地方就是他的,问谁的地盘面积是无穷大的.
思路:由于空间是无限大的,所以仅仅要速度最大就有可能有无限的地盘,重合的点不能严格的比对方快,也不符合规定,然后求速度最大的点围城的凸包,凡是在凸包上的点且不重合的,地盘都是无穷大.
比赛的时候,不会凸包的,现找的模板,不了解性能,不知道计算凸包不能传重合的点进去结果WA出翔
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <queue>
#include <vector>
#include <algorithm> #define INF 1e9
#define maxn 1000
#define EPS 1e-6 #define N 1000
using namespace std;
struct point
{
int x,y; //横纵坐标 : x,y
double len,theta; //与參考点的距离 len 与參考点构成的向量与 (1,0)向量构成的夹角的余弦值 theta
}g[N]; //定义了一个全局变量,记录凸包中的点
/*--------按余弦值,从大到小高速排序--------*/
void qsort(int st,int en)
{
int i=st,j=en;
g[0]=g[i];
while(i<j)
{
while(i<j && g[0].theta>=g[j].theta) j--;
if(i<j) { g[i]=g[j]; i++; }
while(i<j && g[0].theta<=g[i].theta) i++;
if(i<j) { g[j]=g[i]; j--; }
}
g[i]=g[0];
if(st<i-1) qsort(st,i-1);
if(i+1<en) qsort(i+1,en);
} /*-----------Graham 扫描法-------------*/
void graham(int *n)
{
/*第一步,寻找y坐标最小,然后x坐标最小的点*/
int p=1;
for(int i=2;i<=*n;i++)
if((g[i].y<g[p].y)||(g[i].y==g[p].y && g[i].x<g[p].x)) p=i;
g[0]=g[p]; g[p]=g[1]; g[1]=g[0];
/*找到该点,并把它存放在 g 中的第一个元素的位子上*/ /*第二步,计算全部的点距离參考点的距离(len) 还有夹角的余弦值 (theta)*/
for(int i=2;i<=*n;i++)
{
g[i].len=sqrt((g[i].x-g[1].x)*(g[i].x-g[1].x)+(g[i].y-g[1].y)*(g[i].y-g[1].y));
g[i].theta=100*(g[i].x-g[1].x)/g[i].len;
}
qsort(2,*n);//先依据夹角的余弦值从大到小排序 /*第三步,将全部theta值相等的点,仅仅保存len值最大的,存放在数组map中*/
point map[N];
int tot=0; p=1;
while(p<=*n)
{
int k=p;
while(fabs(g[p].theta-g[p+1].theta)<=EPS)
{
if(g[p+1].len>g[k].len) k=p+1;
p++;
}
map[++tot]=g[k];
p++;
} /*第四步,对map中的元素扫描一遍,确定凸包的元素,放在数组g中*/
*n=tot; tot=3; //先做了一个小小的处理,使得自己更好理解
memset(g,0,sizeof(g));
g[1]=map[1]; g[2]=map[2]; g[3]=map[3]; //先将前三个点入栈 g
for(int i=4;i<=*n;i++) //依次用map中的每一个点对g中的点进行一次推断,看是否是属于凸包
{
double chaji=(g[tot].x-g[tot-1].x)*(map[i].y-g[tot].y)-(map[i].x-g[tot].x)*(g[tot].y-g[tot-1].y);
for(;chaji<=0 && tot>=1;) //假设旋转的方向不同,g[tot]这个点就不是,删除,并继续推断 g 中下一个点是不是
{
tot--;
chaji=(g[tot].x-g[tot-1].x)*(map[i].y-g[tot].y)-(map[i].x-g[tot].x)*(g[tot].y-g[tot-1].y);
}
g[++tot]=map[i]; //将map[i]这个点入栈,至于是否是属于凸包中的点,等待以后的点来推断
}
*n=tot;//凸包处理完,总共同拥有tot个凸包上的点
} /*---------------------------------------------------------------------------------------------*/ struct Node{
int x,y,v,rank,bl;
}tmp;
int maxe;
vector<Node> stu;
int cas=0;
bool cmp(Node a,Node b)
{
return a.rank<b.rank;
}
void init(int n)
{
stu.clear();
maxe=0;
for(int i=0;i<n;i++)
{
scanf("%d %d %d",&tmp.x,&tmp.y,&tmp.v);
tmp.rank=i;
tmp.bl=0;
stu.push_back(tmp);
maxe=max(tmp.v,maxe);
}
}
bool check(int a,int b,int tt)
{
int c;
if(b==tt)
{
c=1;
}else
{
c=b+1;
}
double chaji=(g[c].x-g[b].x)*(stu[a].y-g[c].y)-(stu[a].x-g[c].x)*(g[c].y-g[b].y);
if(chaji<=EPS) return 1;
else return 0;
} int main()
{
//freopen("data.in","r",stdin);
int n;
while (~scanf("%d",&n))
{
if(n==0) break;
printf("Case #%d: ",++cas);
init(n); if(maxe==0)
{
for(int i=0;i<n;i++)
{
printf("0");
}
}
else
{
for(int i=0;i<n;i++)
{
if(stu[i].v==maxe)
{
stu[i].bl=1;
}
}
for(int i=0;i<n-1;i++)
{
if(stu[i].bl==1)//错误写法: if(stu[i].v=maxe)
{
for(int j=i+1;j<n;j++)
{
if(stu[i].x==stu[j].x&&stu[i].y==stu[j].y&&stu[i].v==stu[j].v&&i!=j)
{
stu[j].bl=0;
stu[i].bl=-1;
}
}
}
}
int tt=0;
for(int i=0;i<n;i++)
{
if(stu[i].v==maxe&&stu[i].bl!=0)
{ g[++tt].x=stu[i].x;
g[tt].y=stu[i].y;
}
}
//printf("%d\n",tt);
if(tt>=3)
{
graham(&tt);
for(int i=0;i<n;i++){
if(stu[i].bl==1){
stu[i].bl=0;
for(int j=1;j<=tt;j++)
{
if((stu[i].x==g[j].x&&stu[i].y==g[j].y)||check(i,j,tt))
{
stu[i].bl=1;
break;
}
}
}
}
}
sort(stu.begin(),stu.end(),cmp);
for(int i=0;i<n;i++)
{
if(stu[i].bl==-1)
stu[i].bl=0;
printf("%d",stu[i].bl);
}
} puts("");
}
return 0;
}
HDU 4946 Area of Mushroom 凸包 第八次多校的更多相关文章
- HDU 4946 Area of Mushroom 凸包
链接:pid=4946">http://acm.hdu.edu.cn/showproblem.php?pid=4946 题意:有n个人.在位置(xi,yi),速度是vi,假设对于某个点 ...
- hdu 4946 Area of Mushroom(凸包)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4946 Area of Mushroom Time Limit: 2000/1000 MS (Java/Ot ...
- HDU 4946 Area of Mushroom(构造凸包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4946 题目大意:在一个平面上有n个点p1,p2,p3,p4....pn,每个点可以以v的速度在平面上移 ...
- HDU 4946 Area of Mushroom (几何凸包)
题目链接 题意:给定n个人,每个人有一个速度v方向任意.如果平面中存在一个点只有某个人到达的时间最短(即没有人比这个人到的时间更短或相同),那么我们定义这个店归这个人管辖,现在问这些人中哪些人的管辖范 ...
- HDU 4946 Area of Mushroom 共线凸包
题意是在二维平面上 给定n个人 每一个人的坐标和移动速度v 若对于某个点,仅仅有 x 能最先到达(即没有人能比x先到这个点或者同一时候到这个点) 则这个点称作被x占有 若有人能占有无穷大的面积 则输出 ...
- hdu 4946 Area of Mushroom (凸包,去重点,水平排序,留共线点)
题意: 在二维平面上,给定n个人 每个人的坐标和移动速度v 若对于某个点,只有 x 能最先到达(即没有人能比x先到这个点或者同时到这个点) 则这个点称作被x占有,若有人能占有无穷大的面积 则输出1 , ...
- HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)
思路: 只有速度最大才有可能为1,速度不是最大肯定为0,那么就是 只需要操作那些速度最大的点,这些点求一个凸包,判断一下是不是在凸包边上即可. 有几个需要注意的地方: 1.最大速度如果为0 那么肯 ...
- HDU 4946 凸包
给你n个点,具有速度,一个位置如果有其他点能够先到,则不能继续访问,求出里面这些点哪些点是能够无限移动的. 首先我们考虑到,一个速度小的和一个速度大的,速度小的必定只有固定他周围的一定区域是它先到的, ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
随机推荐
- 给EasyUI的DateBox控件添加清除button
EasyUI中间DateBox控制甚至没有被清除button.例如下面的附图: 真是不可思议,对于要求日期格式必须选择的情况下,不能清空日期,很不方便. 尽管能够通过手工改动EasyU ...
- Java 的布局管理器GridBagLayout的使用方法(转)
GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求 ...
- 利用HttpOnly来防御xss攻击
xss的概念就不用多说了,它的危害是极大的,这就意味着一旦你的站点出现xss漏洞,就能够运行随意的js代码,最可怕的是攻击者利用js获取cookie或者session劫持,假设这里面包括了大量敏感信息 ...
- 手提wifi双卡配置+window7同时多用户远程+有些公司限制网络环境方案
该公司只提供几台机器,同时限制并连接到内部办公网络的机, 我们更多的临时工作人员,项目紧张,而另一种是太麻烦了申请, 当被问及其他网络管理,说没有变通方法. 在我的尝试,最后,找到一个解决方案; 解决 ...
- Java误区: 静态代码块,当把类将被载入到自己主动运行?
JAVA静态代码块会在类被载入时自己主动运行? 非常多Java开发人员的思想,被这个思想深深的轮奸了n遍,传播这个错误思想的博客,在网上一堆,越来越多的人被轮奸. 如:http://blog.csdn ...
- 怎样用C#代码管理SharePoint解决方式
怎样用C#代码管理SharePoint解决方式 本文我们将了解怎样用代码管理SharePoint解决方式.我们使用server端对象模型抽取解决方式. SharePoi ...
- Android学习路径(十)怎么会Action Bar堆放在布局
默认情况下.action bar出如今activity窗体的顶部.稍微降低了activity布局的总空间. 假设你想隐藏或者显示action bar.在这堂用户体验的课程中,你能够通过调用hide() ...
- COCOS2D-X FRAME动画创作随笔
CCAnimate继承CCActionInterval,和CCAnimate是一家action,有着action所有的属性和方法. CCAnimate一些重要的方法: static CCAnimate ...
- Objective-C语法简记学习
開始学习iPhone开发了,尽管如今已经有了Swift,但我还是老老实实地学习Objective-C,鄙人入门的程序语言是C,后来学习了C#和Java,如今来学Objective-C,这篇仅仅是一些非 ...
- Smart Framework
Smart Framework:轻量级 Java Web 框架 发表于2年前(2013-09-01 08:39) 阅读(48569) | 评论(188) 544人收藏此文章, 我要收藏 赞83 阿 ...