Submission #3440558


Source Code Expand

#include<bits/stdc++.h>
#define MAX_N 100001
#define INF_INT 2147483647
#define INF_LL 9223372036854775807
#define REP(i,n) for(int i=0;i<(int)(n);i++)
using namespace std;
typedef long long int ll;
typedef pair<int,int> P;
int dx[4] = {1,0,0,-1};
int dy[4] = {0,1,-1,0};
int W,H,N;
int x1[1001],x2[1001],yy1[1001],yy2[1001];

int compress(int *z1,int *z2, int w){
  vector<int> zs(0);
  for(int i=0;i<N;i++){
    for(int d=0;d<=1;d++){
      int tz1 = z1[i]+d-1,tz2 = z2[i]+d;
      if(tz1 >= 0 && tz1 < w) zs.push_back(tz1);
      if(tz2 >= 0 && tz2 < w) zs.push_back(tz2);
    }
  }
  zs.push_back(0);
  zs.push_back(w-1);
  sort(zs.begin(),zs.end());
  zs.erase(unique(zs.begin(),zs.end()),zs.end());
  for(int i=0;i<N;i++){
    z1[i] = lower_bound(zs.begin(),zs.end(),z1[i])-zs.begin();
    z2[i] = lower_bound(zs.begin(),zs.end(),z2[i])-zs.begin();
  }
  return zs.size();
}
int main()
{
  int w,h,cnt=0;
  cin >> W >> H;
  cin >> N;
  REP(i,N){cin >> x1[i] >> yy1[i] >> x2[i] >> yy2[i];
    x2[i]--;yy2[i]--;
  }
  W = compress(x1,x2,W);
  H = compress(yy1,yy2,H);
  vector<vector<short> > imos = vector<vector<short> >(H+1,vector<short>(W+1,0));
  
  for(int i=0;i<N;i++){
    imos[yy1[i]][x1[i]] += 1;
    imos[yy2[i]+1][x1[i]] += -1;
    imos[yy1[i]][x2[i]+1] += -1;
    imos[yy2[i]+1][x2[i]+1] += 1;
  }
  
  
  //横いもす
  for(int i=0;i<H;i++)
    for(int j=0;j<W;j++){
      imos[i][j+1] += imos[i][j];
    }
  //縦いもす
  for(int j=0;j<W;j++)
    for(int i=0;i<H;i++){
      imos[i+1][j] += imos[i][j];
    }
  
  queue<P> que;
  for(int i=0;i<H;i++)
    for(int j=0;j<W;j++){
      if(imos[i][j] == 0){
      que.push(P(j,i));
      while(!que.empty()){
        P p=que.front();que.pop();
        if(p.first >= W || p.first < 0 || p.second >= H || p.second < 0)
          continue;
        if(imos[p.second][p.first] > 0)
          continue;
        imos[p.second][p.first] = 1;
        for(int k=0;k<4;k++)
          que.push(P(p.first+dx[k],p.second+dy[k]));
      }
      
      cnt++;
      }
    }
  cout << cnt << endl;
  return 0;
}

Submission Info

Submission Time
Task E - ペンキの色
User makss
Language C++14 (GCC 5.4.1)
Score 20
Code Size 2152 Byte
Status AC
Exec Time 675 ms
Memory 31744 KB

Judge Result

Set Name set01 set02 set03 set04 set05 set06 set07 set08 set09 set10 set11 set12 set13 set14 set15 set16 set17 set18 set19 set20
Score / Max Score 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1 1 / 1
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
set06 data6
set07 data7
set08 data8
set09 data9
set10 data10
set11 data11
set12 data12
set13 data13
set14 data14
set15 data15
set16 data16
set17 data17
set18 data18
set19 data19
set20 data20
Case Name Status Exec Time Memory
data1 AC 1 ms 256 KB
data10 AC 33 ms 2304 KB
data11 AC 159 ms 17920 KB
data12 AC 242 ms 17920 KB
data13 AC 147 ms 8192 KB
data14 AC 202 ms 8192 KB
data15 AC 227 ms 8192 KB
data16 AC 304 ms 31744 KB
data17 AC 191 ms 15744 KB
data18 AC 508 ms 20352 KB
data19 AC 675 ms 31616 KB
data2 AC 1 ms 256 KB
data20 AC 84 ms 8192 KB
data3 AC 1 ms 256 KB
data4 AC 1 ms 256 KB
data5 AC 1 ms 256 KB
data6 AC 1 ms 256 KB
data7 AC 4 ms 512 KB
data8 AC 4 ms 512 KB
data9 AC 27 ms 2176 KB