【BZOJ 1007】[HNOI2008]水平可见直线 半平面交
来源:互联网 发布:mac word转pdf原页面 编辑:程序博客网 时间:2024/05/16 17:11
裸半平面交
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define maxn 50021using namespace std;int n,ans[maxn],cnt;struct Line{double k,b;int id;bool operator<(const Line& y)const{return k==y.k ? b>y.b : k<y.k;}}l[maxn],q[maxn];struct P{double x,y;P(double a=0,double b=0):x(a),y(b){}};P Q(Line a,Line b){double k1=a.k,k2=b.k,b1=a.b,b2=b.b;double x=(b1-b2)/(k2-k1);double y=k1*x+b1;return P(x,y);}bool judge(Line a,Line b,Line t){P x=Q(a,t);return x.x*b.k+b.b<=x.y;}void solve(){q[1]=l[1],q[2]=l[2];int L=1,R=2;for(int i=3;i<=cnt;i++){while(L<R&&judge(q[R-1],q[R],l[i]))R--;while(L<R&&judge(q[L],q[L+1],l[i]))L++;q[++R]=l[i];}for(int i=L;i<=R;i++){ans[q[i].id]=1;}}int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lf%lf",&l[i].k,&l[i].b),l[i].id=i;sort(l+1,l+1+n);for(int i=1;i<=n;i++){if(l[i].k!=l[i-1].k||i==1)l[++cnt]=l[i];}solve();for(int i=1;i<=n;i++)if(ans[i])printf("%d ",i);return 0;}
0 0
- BZOJ 1007 HNOI2008 水平可见直线 半平面交
- 【BZOJ 1007】[HNOI2008]水平可见直线 半平面交
- [HNOI2008]水平可见直线 半平面交
- [半平面交对偶凸包] BZOJ 1007 [HNOI2008]水平可见直线
- BZOJ 1007 HNOI 2008 水平可见直线 半平面交
- bzoj 1007 水平可见直线 半平面交
- 【BZOJ1007】[HNOI2008]水平可见直线【半平面交】
- [半平面交] BZOJ1007: [HNOI2008]水平可见直线
- 【半平面交】BZOJ1007(HNOI2008)[水平可见直线]题解
- BZOJ1007(HNOI2008)[水平可见直线]--半平面交+单调栈
- 我的第一个半平面交(1007: [HNOI2008]水平可见直线)
- bzoj 1007 水平可见直线 半平面交稀里糊涂的过了...
- bzoj 1007 [HNOI2008] 水平可见直线 题解
- [BZOJ 1007][HNOI2008]水平可见直线
- BZOJ 1007: [HNOI2008]水平可见直线 几何
- [BZOJ 1007] [HNOI2008]水平可见直线
- BZOJ 1007 [HNOI2008]水平可见直线
- BZOJ 1007 [HNOI2008]水平可见直线
- Apache的三种工作模式
- java swing 创建 image 标签
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- matlab 加载txt文件的比较。
- android studio如何导入其他keystore文件
- 【BZOJ 1007】[HNOI2008]水平可见直线 半平面交
- 一个没用的有用说明
- 程序员在线工具
- c++中 动态联编,静态联编和虚函数
- 总结Android四大组件是什么,分别简要说明功能。
- 使用ClassLoader加载包内的资源
- 上班族训练安排。
- 根据资源路径加载ZIP压缩包中指定的资源
- 执行shell脚本错误