zoukankan      html  css  js  c++  java
  • uvaliva3905(扫描线)

    题目链接:https://vjudge.net/problem/UVALive-3905

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 const int maxn=100010;
     5 void update(int x,int a,int w,double &l,double &r)
     6 {
     7     if(a==0)
     8     {
     9         if(x<=0||x>=w) r=l-1;
    10     }
    11     else if(a>0)
    12     {
    13         l=max(l,-x*1.0/a);
    14         r=min(r,(w-x)*1.0/a);
    15     }
    16     else {
    17         l=max(l,(w-x)*1.0/a);
    18         r=min(r,-x*1.0/a);
    19     }
    20 }
    21 struct event
    22 {
    23     double x;
    24     int tp;
    25     bool operator< (const event &a) const {
    26         return x<a.x||(x==a.x&&tp>a.tp);  //先处理右端点
    27     }
    28 }eve[maxn<<1];
    29 int main()
    30 {
    31     int t;
    32     scanf("%d",&t);
    33     while(t--)
    34     {
    35         int w,h,n,e=0;
    36         scanf("%d%d%d",&w,&h,&n);
    37         for(int i=0;i<n;i++)
    38         {
    39             int x,y,a,b;
    40             scanf("%d%d%d%d",&x,&y,&a,&b);
    41             double l=0,r=1e9;
    42             update(x,a,w,l,r);
    43             update(y,b,h,l,r);
    44             if(r>l)
    45             {
    46                 eve[e++]=(event){l,0};
    47                 eve[e++]=(event){r,1};
    48             }
    49         }
    50         sort(eve,eve+e);
    51         int cnt=0,ans=0;
    52         for(int i=0;i<e;i++)
    53         {
    54             if(eve[i].tp==0) ans=max(ans,++cnt);
    55             else cnt--;
    56         }
    57         printf("%d
    ",ans);
    58     }
    59 }
  • 相关阅读:
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
    第九周学习进度条
    个人冲刺
    第八周进度条
    Git疑难解决
    Git常用命令
    git配置SSH公钥
    Laravel框架中如何使用 Presenter 模式?
  • 原文地址:https://www.cnblogs.com/yijiull/p/6728842.html
Copyright © 2011-2022 走看看