Submission #1187862

#TimeUsernameProblemLanguageResultExecution timeMemory
1187862petezaArt Class (IOI13_artclass)C++20
7 / 100
34 ms3296 KiB
#include "artclass.h"
#include <iostream>
using namespace std;

bool isred(int r, int g, int b) {
    return (r - g >= 50 && r - b >= 50);
}

bool isgreen(int r, int g, int b) {
    return (g - r >= 13 && g - b >= 13);
}

bool isblue(int r, int g, int b) {
    return (b - r >= 50 && b - g >= 50);
}

bool iswhite(int r, int g, int b) {
    return (r >= 150) && (g >= 150) && (b >= 150);
}

bool isblack(int r, int g, int b) {
    return (r < 60) && (g < 60) && (b < 60);
}

bool isyellow(int r, int g, int b) {
    return (r - b >= 30) && (g - b >= 30);
}

bool check1(int r, int g, int b) {
    return iswhite(r, g, b) || isred(r, g, b) || isblue(r, g, b) || isblack(r, g, b) || isyellow(r, g, b);
}

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    //detect horizontal, if difference is low, then its a 4
    int sumr, sumg, sumb;
    int cmx = 0;
    for(int i=0;i<H;i++) {
        sumr = sumg = sumb = 0;
        for(int j=0;j<W;j++) {
            sumr += R[i][j];
            sumg += G[i][j];
            sumb += B[i][j];
        }
        sumr /= W;
        sumg /= W;
        sumb /= W;
        int cdiff = 0;
        for(int j=0;j<W;j++) {
            cdiff += labs(sumr - R[i][j]) + labs(sumg-G[i][j]) + labs(sumb-B[i][j]);
        }
        cmx = max(cmx, cdiff/W);
    }
    if(cmx <= 90) return 4;
    //if 90% of the picture is either white, red, blue, yellow, or black, then its a 1
    int cnt = 0;
    for(int i=0;i<H;i++) {
        for(int j=0;j<W;j++) {
            cnt += check1(R[i][j], G[i][j], B[i][j]);
        }
    }
    //cout << cnt << " OUT OF " << H*W << '\n';
    //cout << 100.0*cnt/H/W << "%\n";
    if(cnt >= H*W*0.85) return 1;
    //if its mostly green, its 2????
    sumr = sumg = sumb = 0;
    int greensq = 0;
    for(int i=0;i<H;i++) {
        for(int j=0;j<W;j++) {
            sumr += R[i][j];
            sumg += G[i][j];
            sumb += B[i][j];
            greensq += (isyellow(R[i][j], G[i][j], B[i][j]) || isgreen(R[i][j], G[i][j], B[i][j]));
        }
    }
    return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...