【XSY2138】【BZOJ1007】【HNOI2008】水平可见直线 几何 单调栈
来源:互联网 发布:如何启动蜂窝移动数据 编辑:程序博客网 时间:2024/06/08 17:54
题目大意
给你
题解
如果对于两条直线
把直线按
时间复杂度:每个点只会入栈一次,出栈一次,所以时间复杂度是
代码
#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<ctime>#include<utility>using namespace std;typedef long long ll;typedef pair<int,int> pii;struct line{ double k,b; int id;};line a[500010];line b[500010];int cmp(line a,line b){ if(a.k!=b.k) return a.k<b.k; return a.b<b.b;}int q[500010];int c[500010];double cross(line a,line b){ return (b.b-a.b)/(a.k-b.k);}int main(){ int n; scanf("%d",&n); int i; for(i=1;i<=n;i++) { scanf("%lf%lf",&a[i].k,&a[i].b); a[i].id=i; } sort(a+1,a+n+1,cmp); int m=0; for(i=1;i<=n;i++) if(i==n||a[i].k!=a[i+1].k) b[++m]=a[i]; int t=0; for(i=1;i<=m;i++) { while(t>=2&&cross(b[i],b[q[t-1]])<=cross(b[q[t]],b[q[t-1]])+1e-9) t--; q[++t]=i; } for(i=1;i<=t;i++) c[i]=b[q[i]].id; sort(c+1,c+t+1); for(i=1;i<=t;i++) printf("%d ",c[i]); return 0;}
阅读全文
0 0
- 【XSY2138】【BZOJ1007】【HNOI2008】水平可见直线 几何 单调栈
- [BZOJ1007][HNOI2008]水平可见直线(单调栈+计算几何)
- [BZOJ1007][HNOI2008]水平可见直线(单调栈+计算几何)
- [bzoj1007][HNOI2008]水平可见直线(单调栈+几何)
- 【bzoj1007】[HNOI2008]水平可见直线 单调栈
- 【单调栈】BZOJ1007 [HNOI2008]水平可见直线
- [bzoj1007][HNOI2008]水平可见直线 单调栈
- BZOJ1007 [HNOI2008]水平可见直线 计算几何 单调栈维护上凸包
- 【几何】[HNOI2008][BZOJ1007]水平可见直线
- [BZOJ1007][HNOI2008]水平可见直线(单调栈)
- BZOJ1007(HNOI2008)[水平可见直线]--半平面交+单调栈
- [bzoj1007]:[HNOI2008]水平可见直线(单调栈)
- [BZOJ1007]HNOI2008水平可见直线|计算几何|栈
- [BZOJ1007][HNOI2008]水平可见直线(栈)
- BZOJ1007 [HNOI2008]水平可见直线 贪心+栈
- bzoj1007 [HNOI2008]水平可见直线
- BZOJ1007: [HNOI2008]水平可见直线
- BZOJ1007【HNOI2008】水平可见直线
- 一份关于npm的新手指南
- hdu-2602-Bone Collector-(0-1背包)
- 【前端攻城狮之路】Angular篇
- 1067. 试密码(20)
- 图形学数学--向量
- 【XSY2138】【BZOJ1007】【HNOI2008】水平可见直线 几何 单调栈
- 划分树
- Tomcat启动时执行到Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource...时卡住
- 图片轮播
- 【微软2017年预科生计划在线编程笔试第二场 A】Queen Attack
- 【算法系列】——Java实现冒泡&&快速
- vijos1514 天才的记忆(st表求rmq板子)
- 【你值得更好的】
- 浅析Android中的复制粘贴控制