zoukankan      html  css  js  c++  java
  • 【坐标离散化】AOJ0531- Paint Color

    日文题……一开始被题目骗了以为真的要写文件?

    题目大意&&解答戳:

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<cstdlib>
      5 #include<algorithm>
      6 #include<vector>
      7 #include<queue>
      8 using namespace std;
      9 int w,h,n,ans;
     10 const int MAXN=1000+10;
     11 int x1[MAXN],x2[MAXN],y1[MAXN],y2[MAXN];
     12 int hashx[MAXN*2],hashy[MAXN*2];
     13 int fld[MAXN*2][MAXN*2]; 
     14 int dx[4]={0,0,1,-1};
     15 int dy[4]={1,-1,0,0};
     16 
     17 void compress()
     18 {
     19     int tx=0,ty=0;
     20     for (int i=1;i<=n;i++)
     21     {
     22         hashx[++tx]=x1[i];hashx[++tx]=x2[i];
     23         hashy[++ty]=y1[i];hashy[++ty]=y2[i];
     24     }
     25     hashx[++tx]=0;hashx[++tx]=w;
     26     hashy[++ty]=0;hashy[++ty]=h;
     27     sort(hashx+1,hashx+tx+1);
     28     sort(hashy+1,hashy+ty+1);
     29     w=unique(hashx+1,hashx+tx+1)-(hashx+1);
     30     h=unique(hashy+1,hashy+ty+1)-(hashy+1);
     31     for (int i=1;i<=n;i++)
     32     {
     33         x1[i]=lower_bound(hashx+1,hashx+w+1,x1[i])-hashx-1;
     34         x2[i]=lower_bound(hashx+1,hashx+w+1,x2[i])-hashx-1;
     35         y1[i]=lower_bound(hashy+1,hashy+h+1,y1[i])-hashy-1;
     36         y2[i]=lower_bound(hashy+1,hashy+h+1,y2[i])-hashy-1;
     37     }
     38     w--;h--;
     39 }
     40 
     41 void init()
     42 {
     43     scanf("%d",&n);
     44     for (int i=1;i<=n;i++)
     45         scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]);
     46     compress();
     47 }
     48 
     49 void imos()    /*imos?*/
     50 {
     51     memset(fld,0,sizeof(fld));
     52     for (int i=1;i<=n;i++)
     53     {
     54         fld[x1[i]][y1[i]]++;
     55         fld[x2[i]][y2[i]]++;
     56         fld[x1[i]][y2[i]]--;
     57         fld[x2[i]][y1[i]]--;
     58     }
     59     
     60     for (int i=0;i<w;i++)
     61         for (int j=1;j<h;j++)
     62             fld[i][j]+=fld[i][j-1];
     63             
     64     for (int j=0;j<h;j++)
     65         for (int i=1;i<w;i++)
     66             fld[i][j]+=fld[i-1][j];
     67 }
     68 
     69 void bfs(int x,int y)
     70 {
     71     ans++;
     72     queue<int> qx,qy;
     73     qx.push(x);
     74     qy.push(y);
     75     fld[x][y]=1;
     76     while (!qx.empty())
     77     {
     78         int xx=qx.front();qx.pop();
     79         int yy=qy.front();qy.pop();
     80         for (int i=0;i<4;i++)
     81         {
     82              int nx=xx+dx[i],ny=yy+dy[i];
     83              if (nx<0 || ny<0 || nx>w || ny>h || fld[nx][ny]>0) continue;
     84              qx.push(nx);
     85              qy.push(ny);
     86              fld[nx][ny]=1;
     87         }
     88     }
     89 }
     90 
     91 void solve()
     92 {
     93     ans=0;
     94     for (int i=0;i<w;i++)
     95         for (int j=0;j<h;j++)
     96             if (fld[i][j]==0) bfs(i,j);
     97     printf("%d
    ",ans);
     98 }
     99 
    100 int main()
    101 {
    102     //freopen("input.txt","r",stdin);
    103     //freopen("output.txt","w",stdout);
    104     while (~scanf("%d%d",&w,&h)&&w&&h)
    105     {
    106         init();
    107         imos();
    108         solve();
    109     }
    110     return 0;    
    111 } 
  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/6081320.html
Copyright © 2011-2022 走看看