제출 #1215384

#제출 시각아이디문제언어결과실행 시간메모리
1215384brintonRectangles (IOI19_rect)C++20
13 / 100
472 ms400504 KiB
#include <bits/stdc++.h>
#include "rect.h"
using namespace std;

long long count_rectangles(vector<vector<int> > a) {
	int N = a.size(),M = a[0].size();

	vector<vector<bool>> vis(N,vector<bool>(M,false));

	int li,ri,lj,rj;
	int cnt;

	int di[4] = {1,0,-1,0};
	int dj[4] = {0,1,0,-1};
	function<void(int,int)> fill_up = [&](int i,int j){
		li = min(li,i), lj = min(lj,j);
		ri = max(ri,i), rj = max(rj,j);
		cnt++;
		
		for(int d = 0;d < 4;d++){
			int ni = i+di[d];
			int nj = j+dj[d];
			if(ni < 0 || nj < 0 || ni >= N || nj >= M) continue;
			if(a[ni][nj] == 1) continue;
			if(vis[ni][nj]) continue;
			vis[ni][nj] = true;
			fill_up(ni,nj);
		}
	};
	long long ans = 0;
	for(int i = 0;i < N;i++){
		for(int j = 0;j < M;j++){
			if(a[i][j] == 1 || vis[i][j]) continue;
			li = i,ri = i,lj = j,rj = j,cnt = 0;
			vis[i][j] = true;
			fill_up(i,j);
			if(li == 0 || lj == 0 || ri == N-1 || rj == M-1) continue;
			if((ri-li+1)*(rj-lj+1) != cnt) continue;
			// cout << i << " " << j << endl;
			ans++;
		}
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...