Submission #1216949

#TimeUsernameProblemLanguageResultExecution timeMemory
1216949AmirAli_H1Art Class (IOI13_artclass)C++17
54 / 100
59 ms5268 KiB
// In the name of Allah

#include <bits/stdc++.h>
#include "artclass.h"
using namespace std;

typedef		long long int			ll;
typedef		long double				ld;
typedef		pair<int, int>			pii;
typedef		pair<ll, ll>			pll;
typedef		complex<ld>				cld;

#define		all(x)					(x).begin(),(x).end()
#define		len(x)					((ll) (x).size())
#define		F						first
#define		S						second
#define		pb						push_back
#define		sep						' '
#define		endl					'\n'
#define		Mp						make_pair
#define		kill(x)					cout << x << '\n', exit(0)
#define		set_dec(x)				cout << fixed << setprecision(x);
#define		file_io(x,y)			freopen(x, "r", stdin); freopen(y, "w", stdout);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int n, m, D = 2;
const int maxn = 500 + 4;
const int maxs = maxn * maxn;
int p[maxs], sz[maxs], num;

int GI(int i, int j) {
	return (i * m + j);
}

int get(int a) {
	return (p[a] == a) ? a : p[a] = get(p[a]);
}

void merge(int a, int b) {
	a = get(a); b = get(b);
	if (a == b) return ;
	if (sz[a] > sz[b]) swap(a, b);
	p[a] = b; sz[b] += sz[a]; sz[a] = 0; num--;
}

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
	n = H; m = W; num = n * m;
	ld valx = 0, vald = 0;
	iota(p, p + (n * m), 0); fill(sz, sz + (n * m), 1);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			valx += R[i][j] + G[i][j] + B[i][j];
			vald += (abs(R[i][j] - G[i][j]) + abs(R[i][j] - B[i][j]) + abs(G[i][j] - B[i][j]));
			for (int i1 : {i - 1, i, i + 1}) {
				for (int j1 : {j - 1, j, j + 1}) {
					if (i1 >= 0 && i1 < n && j1 >= 0 && j1 < m) {
						if (abs(R[i][j] - R[i1][j1]) <= D && abs(G[i][j] - G[i1][j1]) <= D && abs(B[i][j] - B[i1][j1]) <= D) {
							merge(GI(i, j), GI(i1, j1));
						}
					}
				}
			}
		}
	}
	ld val = ((ld) num) / (n * m);
	valx /= (3 * n * m); vald /= (3 * n * m);
	if (val >= 0.6) {
		if (valx < 100) return 2;
		else return 3;
	}
	else {
		if (vald < 50) return 1;
		else return 4;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...