# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1260471 | repmann | Art Class (IOI13_artclass) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "artclass.h"
using namespace std;
const int T = 10000;
int N, M, comp;
int V[502][502];
int R[502][502], G[502][502], B[502][502];
int di[8] = {-1, +0, +1, +0, -1, -1, +1, +1};
int dj[8] = {+0, -1, +0, +1, -1, +1, +1, -1};
inline int sqr(int x) {return x * x;}
inline int dist(int r1, int g1, int b1, int r2, int g2, int b2) {return sqr(r1 - r2) + sqr(g1 - g2) + sqr(b1 - b2);}
inline void DFS(int i, int j)
{
V[i][j] = comp;
for(int k = 0; k < 4; k++)
{
if(V[i + di[k]][j + dj[k]]) continue;
if(dist(R[i][j], G[i][j], B[i][j], R[i + di[k]][j + dj[k]], G[i + di[k]][j + dj[k]], B[i + di[k]][j + dj[k]]) > T) continue;
DFS(i + di[k], j + dj[k]);
}
return;
}
int syle(int n, int m, int r[500][500], int g[500][500], int b[500][500])
{
N = n;
M = m;
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= M; j++)
{
R[i][j] = r[i - 1][j - 1];
G[i][j] = g[i - 1][j - 1];
B[i][j] = b[i - 1][j - 1];
}
}
for(int i = N + 1; i >= 0; i--) V[i][0] = V[i][M + 1] = -1;
for(int j = M + 1; j >= 0; j--) V[0][j] = V[N + 1][j] = -1;
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= M; j++)
{
if(V[i][j]) continue;
comp++;
DFS(i, j);
}
}
if(comp <= 10) return 4;
if(comp <= 30) return 1;
if(comp <= 100) return 2;
return 3;
return 0;
}