zoukankan      html  css  js  c++  java
  • 【UVALive】3905 Meteor(扫描线)

    题目

    传送门:QWQ

    分析

    扫描线搞一搞。

    按左端点排序,左端点相同时按右端点排序。

    如果是左端点就$ cnt++ $,否则$ cnt-- $

    统计一下$ Max $就行了

    代码

    #include <bits/stdc++.h>
    using namespace std;
    void update(int x,int a,int w,double& L,double& R){
        if(a==0){
            if(x<=0||x>=w) R=L-1;
        }
        else if(a>0){
            L=max(L,-(double)x/a);
            R=min(R,double(w-x)/a);
        }
        else{
            L=max(L,(double)(w-x)/a);
            R=min(R,-(double)x/a);
        }
    }
    const int maxn=100010;
    struct Event{
        double x; int type;
        bool operator < (const Event& a) const{
            return x<a.x || (x==a.x&&type>a.type);
        } 
    }events[maxn*2];
    
    int main(){
        int T;scanf("%d",&T);
        while(T--){
            int w,h,n,e=0;
            scanf("%d%d%d",&w,&h,&n);
            for(int i=0;i<n;i++){
                int x,y,a,b;
                scanf("%d%d%d%d",&x,&y,&a,&b);
                double L=0, R=1e9;
                update(x,a,w,L,R); update(y,b,h,L,R);
                if(R>L){
                    events[e++]=(Event){L,0};
                    events[e++]=(Event){R,1};
                }
            }
            sort(events,events+e);
            int cnt=0, ans=0;
            for(int i=0;i<e;i++){
                if(events[i].type==0) ans=max(ans,++cnt);
                else --cnt;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    mac安装go环境
    Ubuntu-Mininet安装
    安装pyenv
    linux下安装weblogic
    C#常用方法
    jenkins部署net core ——2
    jenkins部署net core ——1
    Inno Steup
    安装两个SQL server 实例
    C#线程启动、暂停、恢复、停止怎么实现
  • 原文地址:https://www.cnblogs.com/noblex/p/9224889.html
Copyright © 2011-2022 走看看