Uva1398 Meteor
2016-11-13 18:25
399 查看
扫描线法。
将流星出现在相机里的时间转化成线段,离散化端点后,扫描何时出现的流星最多。注意边界的不算,所以要先减右端点再加左端点
/*By SilverN*/ #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define LL long long using namespace std; const int mxn=100010; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int T; int n,w,h; struct node{ int v,t; }c[mxn<<1];int cnt=0; int cmp(node a,node b){ if(a.v==b.v)return a.t>b.t; return a.v<b.v; } //int h1[mxn],h2[mxn],w1[mxn],w2[mxn]; int L,R; void init(int a,int x,int w){ if(!a){ if(x<=0 || x>=w)R=L-1; } else if(a>0){ L=max(L,-x*2520/a); R=min(R,(w-x)*2520/a); } else{ L=max(L,(w-x)*2520/a); R=min(R,-x*2520/a); } return; } int main(){ T=read(); int i,j; int x,y,a,b; while(T--){ cnt=0;//init w=read();h=read();n=read(); for(i=1;i<=n;i++){ x=read();y=read();a=read();b=read(); L=0,R=0x7f7f7f7f; init(a,x,w);init(b,y,h); if(R>L){ c[++cnt].v=L;c[cnt].t=0; c[++cnt].v=R;c[cnt].t=1; } } sort(c+1,c+cnt+1,cmp); int ans=0,ct=0; for(i=1;i<=cnt;i++){ if(!c[i].t){//进入 ++ct; ans=max(ans,ct); } else --ct; } printf("%d\n",ans); } return 0; }
相关文章推荐
- UVA 1398 - Meteor
- Uva1398--Meteor(扫描线)
- 【转换模型+扫描线】【UVA1398】Meteor
- UVA 1398 - Meteor
- uva 1398 - Meteor(贪心)
- Seoul 2007 / UVa 1398 Meteor (排序&线性扫描)
- UVA 1398 - Meteor
- UVA 1398 - Meteor
- UVA 1398 - Meteor
- UVA - 1398 Meteor
- UVA 1398 - Meteor(排序+扫描方法+几何)
- uva 1398 - Meteor
- UVA 1398 - Meteor
- UVA 1398 - Meteor
- UVA 1398 Meteor
- UVA 1398 Meteor(扫描线)
- UVa 1398 Meteor 解题报告(扫描线)
- UVA 1398 - Meteor
- UVA 1398 - Meteor
- uva 1398 - Meteor 模拟 99