# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1201077 | Marco_Escandon | Art Class (IOI13_artclass) | C++20 | 0 ms | 0 KiB |
//#include "artclass.h"
#include<bits/stdc++.h>
using namespace std;
int cnt(int n, int m, int R[500][500], int G[500][500], int B[500][500], int x) {
vector<vector<int>> g(n, vector<int>(m, 0));
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
g[i][j] = (int)(0.299 * R[i][j] + 0.587 * G[i][j] + 0.114 * B[i][j] + 0.5);
}
}
vector<vector<bool>> v(n, vector<bool>(m, false));
int c = 0;
int dx[4] = { 1, 0, -1, 0 };
int dy[4] = { 0, 1, 0, -1 };
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (!v[i][j]) {
c++;
queue<pair<int, int>> st;
st.push({i, j});
v[i][j] = true;
while (!st.empty()) {
auto [ci, cj] = st.front();
st.pop();
for (int k = 0; k < 4; k++) {
int ni = ci + dx[k], nj = cj + dy[k];
if (ni >= 0 && ni < n && nj >= 0 && nj < m && !v[ni][nj]) {
if (abs(g[ci][cj] - g[ni][nj]) < x) {
v[ni][nj] = true;
st.push({ni, nj});
}
}
}
}
}
}
}
return c;
}
int dx[]={1,0,-1,0,1,1,-1,-1};
int dy[]={0,1,0,-1,1,-1,1,-1};
int style(int n, int m, int R[500][500], int G[500][500], int B[500][500]) {
double c1=0,c2=0,c3=0;
for(int i=1; i<n-1; i++)
{
for(int j=1; j<m-1; j++)
{
int temp=0;
for(int k=0; k<4; k++)
{
if(R[i][j]==R[i+dx[k]][j+dy[k]]&&G[i][j]==G[i+dx[k]][j+dy[k]]&&B[i][j]==B[i+dx[k]][j+dy[k]]) temp++;
}
if(R[i][j]==0&&B[i][j]==0&&G[i][j]==0) c2++;
if(R[i][j]==255||B[i][j]==255||G[i][j]==255) c2++;
c1+=(temp>=3);
}
}
if(c1*100/(n*m)>0.1)
{
if((double)cnt(n, m, R, G,B, 20)/(n*m)>0.0004||c2) return 1;
else return 4;
}
return 3;
}