제출 #1152983

#제출 시각아이디문제언어결과실행 시간메모리
1152983PagodePaivaArt Class (IOI13_artclass)C++20
0 / 100
57 ms6344 KiB
#include "artclass.h"
#include<bits/stdc++.h>

using namespace std;

const int N = 510;
int componentes;
int mark[N][N];
int h, w;
int r[N][N], g[N][N], b[N][N];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
bool check(int i, int j){
    if(i < 0 or i >= h or j < 0 or j >= w) return false;
    return true;
}

bool difff(int a, int bb, int c, int d){
    //cout << max({abs(r[a][bb]-r[c][d]), abs(g[a][bb]-g[c][d]), abs(b[a][bb]-b[c][d])}) << endl;
    if(abs(r[a][bb]-r[c][d]) + abs(g[a][bb]-g[c][d])+ abs(b[a][bb]-b[c][d]) >= 60) return true;
    return false;
}

void dfs(int i, int j){
    if(!check(i, j)) return;
    if(mark[i][j]) return;
    mark[i][j] = 1;
    for(int t = 0;t < 4;t++){
        if(check(i+dx[t], j+dy[t])){
            if(difff(i, j, i+dx[t], j+dx[t])) dfs(i+dx[t], j+dx[t]);
        }
    }
    return;
}

bool preto(int i, int j){
    if(r[i][j]+g[i][j]+b[i][j] < 200) return true;
    return false;
}

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    h = H;
    w = W;
    int qtdbrancos = 0, qtdpretos = 0;
    int diff = 0;
    for(int i = 0;i < H;i++){
        for(int j = 0;j < W;j++){
            r[i][j] = R[i][j];
            g[i][j] = G[i][j];
            b[i][j] = B[i][j];
            if(r[i][j]+g[i][j]+b[i][j] > 600) qtdbrancos++;
            if(r[i][j]+g[i][j]+b[i][j] < 100) qtdpretos++;
            if(j > 0){
                int t = abs(r[i][j] - r[i][j-1])+abs(g[i][j] - g[i][j-1])+abs(b[i][j] - b[i][j-1]);
                if(t > 100) diff++;
            }
        }
    }
    int aux = 0;
    for(int i = 0;i < H;i++){
        for(int j = 0;j < W;j++){
            if(preto(i, j)) continue;
            for(int t = 0;t < 4;t++){
                if(check(i+dx[t], j+dy[t])){
                    if(preto(i+dx[t], j+dy[t])) continue;
                    if(difff(i, j, i+dx[t], j+dy[t])){
                        aux++;
                    }
                }
            }
        }
    }
    cout << aux << endl;
    if(diff > 5e4) return 3;
    else if(diff < 100) return 4;
    else if(aux <= 2e4) return 1;
    return 2;
}
#Verdict Execution timeMemoryGrader output
Fetching results...