Submission #1206218

#TimeUsernameProblemLanguageResultExecution timeMemory
1206218thelegendary08Rectangles (IOI19_rect)C++17
0 / 100
148 ms34584 KiB
#include "rect.h"
#include<bits/stdc++.h>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define pb push_back
#define vi vector<int>
#define vout(v) for(auto u : v)cout<<u<<' '; cout<<'\n';
#define dout(x) cout<<x<<' '<<#x<<'\n';
#define pii pair<int,int>
#define vpii vector<pii>
#define vb vector<bool>
#define mp make_pair
using namespace std;
int n,m;
vector<vector<signed>>grid;
vpii adj(pii a){
	int x = a.first; int y = a.second;
	vpii ret;
	if(x > 0 && grid[x-1][y] == 0){
		ret.pb(mp(x-1, y));
	}
	if(y > 0 && grid[x][y-1] == 0){
		ret.pb(mp(x, y-1));
	}
	if(x < n-1 && grid[x+1][y] == 0){
		ret.pb(mp(x+1, y));
	}
	if(y < m-1 && grid[x][y+1] == 0){
		ret.pb(mp(x, y+1));
	}
	return ret;
}
long long int count_rectangles(std::vector<std::vector<signed> > a) {
	grid = a;
	n = a.size(); m = a[0].size();
	vector<vector<bool>>vis(n, vector<bool>(m));
	int ans = 0;
	f0r(i,n){
		f0r(j,m){
			if(a[i][j] == 0 && !vis[i][j]){
				
				queue<pii>q;
				int tot = 1;
				q.push(mp(i,j));
				int mnx = i; int mxx = i; int mny = j; int mxy = j;
				while(!q.empty()){
					pii node = q.front(); q.pop();
					for(auto u : adj(node)){
						if(vis[u.first][u.second])continue;
						mnx = min(mnx, u.first);
						mxx = max(mxx, u.first);
						mny = min(mny, u.second);
						mxy = max(mxy, u.second);
						tot++;
						vis[u.first][u.second] = 1;
						q.push(mp(u.first, u.second));
					}
				}
				int area = (mxx - mnx + 1) * (mxy - mny + 1);
				if(mnx > 0 && mxx < n-1 && mny > 0 && mxy < m-1 && area == tot)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...