Submission #399120

#TimeUsernameProblemLanguageResultExecution timeMemory
399120prvocisloArt Class (IOI13_artclass)C++17
0 / 100
98 ms7236 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <queue>
#include "artclass.h"
typedef long long ll;
using namespace std;

const int dx[4] = { 1, 1, -1, -1 }, dy[4] = { -1, 1, -1, 1 }, maxn = 500;
int h, w;
bool valid(int x, int y) { return 0 <= x && x < h && 0 <= y && y < w; }
vector<vector<int> > vis, r(maxn, vector<int>(maxn)), g(maxn, vector<int>(maxn)), b(maxn, vector<int>(maxn));
bool black(int x, int y) { return r[x][y] + b[x][y] + g[x][y] < 100; }
bool same(int x1, int y1, int x2, int y2) { 
	return abs(r[x1][y1] - r[x2][y2]) + abs(g[x1][y1] - g[x2][y2]) + abs(b[x1][y1] - b[x2][y2]) < 75;
}
bool green(int x, int y) 
{
	return b[x][y] + 20 < g[x][y] && r[x][y] + 20 < g[x][y];
}
int style(int H, int W, int R[500][500], int G[500][500], int B[500][500])
{
	h = H, w = W; vis.assign(h, vector<int>(w, 0));
	for (int i = 0; i < h; i++) for (int j = 0; j < w; j++)
		r[i][j] = R[i][j], g[i][j] = G[i][j], b[i][j] = B[i][j];
	int big = 0, small = 0, semi = 0, gr = 0;
	int minx = h, miny = w, maxx = 0, maxy = 0;
	for (int i = 0; i < h; i++) for (int j = 0; j < w; j++)
	{
		if (green(i, j)) gr++;
		if (black(i, j))
		{
			minx = min(i, minx), maxx = max(i, maxx);
			miny = min(j, miny), maxy = max(j, maxy);
		}
		if (!vis[i][j])
		{
			int siz = 0;
			queue<pair<int, int> > q; q.push({ i, j });
			while (!q.empty())
			{
				int x, y; 
				tie(x, y) = q.front(); q.pop(); siz++;
				for (int i = 0; i < 4; i++)
				{
					int xi = x + dx[i], yi = y + dy[i];
					if (!valid(xi, yi) || !same(x, y, xi, yi) || vis[xi][yi]) continue;
					q.push({ xi, yi }); vis[xi][yi] = true;
				}
			}
			if (siz > (h * w) / 50) semi++;
			if (siz > (h * w) / 20) big++;
			else small++;
		}
	}
	cout << big << " " << small << " " << gr << "\n";
	int mx = abs(minx - maxx), my = abs(miny - maxy); // pre styl 1 mame vela nahodnej ciernej
	if (10 <= semi && mx >= (h / 8) * 7 && my >= (w / 8) * 7) return 1;
	if (gr >= (H * W) / 2) return 2;
	if (big) return 4;
	return 3;
}
#Verdict Execution timeMemoryGrader output
Fetching results...