太阳集团53138.com

  • 长征六号运载火箭预计2020年底首飞 2019-05-25
  • 张海迪在中国残疾人联合会第七次全国代表大会上的报告 2019-05-25
  • 跟紧我!带你进入肥肠爱好者的天堂 2019-05-25
  • 无人驾驶走出国门——金旅星辰无人驾驶客车进行以色列道路测试 2019-05-25
  • 叶璇被发限制消费令仍未履行义务 法院将采取措施叶璇未履行义务-港台 2019-05-25
  • 小天视频乌鲁木齐市小绿谷给你一场元宵节烟火灯光盛宴 2019-05-25
  • Apex英雄玩家超5千万 要赢就选华硕B360电竞特工主板 2019-05-25
  • 各民族女代表“三八”妇女节送祝福 2019-05-25
  • 【暖新闻】奉献路上永无止境 “商丘好人”黄伟10年公益路 2019-05-25
  • [梨园传奇]京剧《秦琼卖马》片断 表演:傅希如 2019-05-24
  • 董卿素颜接孩子放学 学费18万幼儿园曝光学费董卿-大陆 2019-05-24
  • 推动英中经贸合作 伦敦金融城市长访华 2019-05-24
  • 中国同欧盟成员国首次举行外长集体对话 2019-05-24
  • 你自立的样子真帅!男孩天生短臂仅有3指 是最美大学生还是体育健儿 2019-05-24
  • 为确保非公开发行股票顺利推进 华控赛格定增两年未果要延… 2019-05-24
  • BZOJ 1007, 水平可见直线

    太阳集团53138.com www.pema-photograph.com 2/10/2017来源:ASP.NET技巧人气:6150

    PRoblem

    传送门

    Mean

    参见题目描述。

    Analysis

    将直线按斜率排序,然后从小到大依次入栈,入栈时计算该直线与栈顶元素交点。 若该交点在栈顶元素与栈顶下一个元素交点的左侧(或重合),则栈顶元素被完整遮挡,出栈。 反复比较,全部操作完毕后栈中元素即为可见水平直线。

    Code

    #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const double EPS=1e-10; const int N=50005; int n,top,s[N]; bool f[N]; struct Line{ int id; double a,b; bool Operator < (const Line &B) const { if(fabs(a-B.a)<EPS) return b<B.b; return a<B.a; } }l[N]; double Cross(Line A,Line B){return (B.b-A.b)/(A.a-B.a);} int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lf%lf",&l[i].a,&l[i].b); l[i].id=i; } sort(l,l+n); for(int i=0;i<n;i++){ while(top){ if(fabs(l[s[top]].a-l[i].a)<EPS) top--; else if(top>1 && Cross(l[s[top]],l[i])<=Cross(l[s[top-1]],l[s[top]])) top--; else break; } s[++top]=i; } for(int i=1;i<=top;i++) f[l[s[i]].id]=1; for(int i=0;i<n;i++) if(f[i]) printf("%d ",i+1); return 0; }