Submission #1030952

#TimeUsernameProblemLanguageResultExecution timeMemory
1030952fv3Rectangles (IOI19_rect)C++14
13 / 100
457 ms545228 KiB
#include "rect.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int N, M;
int l, r, t, d, cnt;

vector<vector<int>> grid, visited;
void DFS(int x, int y)
{
	visited[y][x] = 1; cnt++;
	l = min(l, x); r = max(r, x);
	t = min(t, y); d = max(d, y);

	if (x && !grid[y][x-1] && !visited[y][x-1])
		DFS(x-1, y);
	if (y && !grid[y-1][x] && !visited[y-1][x])
		DFS(x, y-1);
	if (x+1<M && !grid[y][x+1] && !visited[y][x+1])
		DFS(x+1, y);
	if (y+1<N && !grid[y+1][x] && !visited[y+1][x])
		DFS(x, y+1);
}

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

	grid = a;
	visited = vector<vector<int>>(N, vector<int>(M));

	ll res = 0;
	for (int y = 1; y < N-1; y++)
	{
		for (int x = 1; x < M-1; x++)
		{
			if (visited[y][x] || grid[y][x]) continue;
			l = r = x;
			t = d = y;
			cnt = 0;
			DFS(x, y);

			if (cnt == (r - l + 1) * (d - t + 1) && l && t && d < N-1 && r < M-1)
				res++;
		}
	}

	return res;
}
#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...