• POJ 1151 矩形面积并


    题解:
    把横坐标离散化,然后把矩形拆成上下两条边,上边标成-1,下边标成1,然后按情况增减面积即可~

    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 
     7 #define N 222
     8 
     9 using namespace std;
    10 
    11 struct LI
    12 {
    13     double y,sx,tx;
    14     int nsx,ntx,fg;
    15 }li[N<<1];
    16 
    17 int gs,cs,cnt,n,cas;
    18 int c[N<<1];
    19 double a[N<<1],ans;
    20 
    21 inline bool cmp(const LI &a,const LI &b)
    22 {
    23     return a.y<b.y;
    24 }
    25 
    26 inline void read()
    27 {
    28     gs=cs=0;double tx,ty,sx,sy;
    29     for(int i=1;i<=n;i++)
    30     {
    31         scanf("%lf%lf%lf%lf",&sx,&sy,&tx,&ty);
    32         a[++gs]=sx; a[++gs]=tx;
    33         li[++cs].y=sy; li[cs].sx=sx; li[cs].tx=tx; li[cs].fg=-1;
    34         li[++cs].y=ty; li[cs].sx=sx; li[cs].tx=tx; li[cs].fg=1;
    35     }
    36     sort(li+1,li+1+cs,cmp);
    37     sort(a+1,a+1+gs);
    38     cnt=unique(a+1,a+1+gs)-a-1;
    39     for(int i=1;i<=cs;i++)
    40     {
    41         li[i].nsx=lower_bound(a+1,a+1+cnt,li[i].sx)-a;
    42         li[i].ntx=lower_bound(a+1,a+1+cnt,li[i].tx)-a;
    43     }
    44 }
    45 
    46 inline void go()
    47 {
    48     memset(c,0,sizeof c);
    49     ans=0.0;
    50     for(int i=1;i<=cs;i++)
    51         for(int j=li[i].nsx;j<li[i].ntx;j++)
    52         {
    53             if(li[i].fg==-1)
    54             {
    55                 c[j]--;
    56                 if(c[j]==-1) ans-=(a[j+1]-a[j])*li[i].y;
    57             }
    58             else
    59             {
    60                 c[j]++;
    61                 if(c[j]==0) ans+=(a[j+1]-a[j])*li[i].y;
    62             }
    63         }
    64     printf("Test case #%d\n",++cas);
    65     printf("Total explored area: %.2lf\n\n",ans);
    66 }
    67 
    68 int main()
    69 {
    70     while(scanf("%d",&n),n) read(),go();
    71     return 0;
    72 }
  • 相关阅读:
    八皇后-递归
    代码复用3
    权限管理系统-角色组模块
    MzBlog分析
    linux shell 终端中文乱码(转)
    LINUX下中文语言包的安装(转)
    每一个程序员必须知道的业内英语词汇(转)
    80后创业故事之:兄弟散伙,创业失败(转)
    尊重用户的习惯审美,不要挑战用户的习惯(转)
    libpcre.so.1 cannot be found
  • 原文地址:https://www.cnblogs.com/proverbs/p/2924581.html
Copyright © 2020-2023  润新知