Submission #1201361

#TimeUsernameProblemLanguageResultExecution timeMemory
1201361kl0989eArt Class (IOI13_artclass)C++20
72 / 100
68 ms5704 KiB
#include <bits/stdc++.h>
#include "artclass.h"
using namespace std;

#define ll long long
#define fi first
#define se second
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define pi pair<int, int>
#define pl pair<ll,ll>
#define all(x) (x).begin(),(x).end()

bool is_green(array<int,3> a) {
    return a[1]>=max(a[0],a[2])+3;
}

bool is_white(array<int,3> a) {
    return ((*min_element(all(a))>215) && ((max(max(a[0],a[1]),a[2])-min(min(a[0],a[1]),a[2]))<20));
}

bool is_black(array<int,3> a) {
    return ((*max_element(all(a))<50) && ((max(max(a[0],a[1]),a[2])-min(min(a[0],a[1]),a[2]))<20));
}

bool diff(array<int,3> a, array<int,3> b) {
    int d=0;
    for (int i=0; i<3; i++) {
        d+=abs(a[i]-b[i]);
    }
    return d>=9;
}

vector<vi> black(510,vi(510,0));
vi ax={1,-1,0,0};
vi ay={0,0,1,-1};

void dfs(int i, int j) {
    black[i][j]=0;
    for (int k=0; k<4; k++) {
        if (black[i+ax[k]][j+ay[k]]) {
            dfs(i+ax[k],j+ay[k]);
        }
    }
}

int style(int h, int w, int r[500][500], int g[500][500], int b[500][500]) {
    int green=0,white=0,black_cnt=0;;
    int hor=0,ver=0;
    for (int i=0; i<h; i++) {
        for (int j=0; j<w; j++) {
            green+=is_green({r[i][j],g[i][j],b[i][j]});
            white+=is_white({r[i][j],g[i][j],b[i][j]});
            black[i+1][j+1]=is_black({r[i][j],g[i][j],b[i][j]});
            black_cnt+=is_black({r[i][j],g[i][j],b[i][j]});
            if (i!=h-1) {
                ver+=diff({r[i][j],g[i][j],b[i][j]},{r[i+1][j],g[i+1][j],b[i+1][j]});
            }
            if (j!=w-1) {
                hor+=diff({r[i][j],g[i][j],b[i][j]},{r[i][j+1],g[i][j+1],b[i][j+1]});
            }
        }
    }
    int comp=0;
    for (int i=1; i<=h; i++) {
        for (int j=1; j<=w; j++) {
            if (black[i][j]) {
                comp++;
                dfs(i,j);
            }
        }
    }
    if (white>h*w/10 || (comp>0 && comp<5 && black_cnt>h*w/30)) {
        return 1;
    }
    if (hor<h*w/2 && ver<h*w/2) {
        return 4;
    }
    if (green>h*w/5) {
        return 2;
    }
    return 3;
}
#Verdict Execution timeMemoryGrader output
Fetching results...