Submission #1201111

#TimeUsernameProblemLanguageResultExecution timeMemory
1201111Marco_EscandonArt Class (IOI13_artclass)C++20
32 / 100
38 ms4172 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.05||c2!=0) return 1;
        else return 4;
    }
    if((double)cnt(n, m, R, G,B, 20)/(n*m)>=0.4) return 3;
    else return 2;
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...