제출 #97592

#제출 시각아이디문제언어결과실행 시간메모리
97592georgerapeanu미술 수업 (IOI13_artclass)C++11
36 / 100
243 ms11232 KiB
#include "artclass.h"
#include <cstdio>
#include <set>
#include <algorithm>
#include <queue>

using namespace std;

const int dx[] = {-1,0,1,0};
const int dy[] = {0,1,0,-1};

set<pair<pair<int,int>,int> > s;

bool viz[500][500];

double abs_gr(int a){
    if(a <= 255 / 2.0){
        a = 255 - a;
    }
    const double split = 200;
    const double split_val = 0.50;
    if(a <= split) return a / (split / split_val);
    return split_val + (1 - split_val) * (a - split) / (255 - split);
}

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    
    double averageR = 0;
    double averageG = 0;
    double averageB = 0;
    double area = 0;

    double absolutes = 0;

    for(int i = 0;i < H;i++){
        for(int j = 0;j < W;j++){
            s.insert(make_pair(make_pair(R[i][j],G[i][j]),B[i][j]));
            averageR += R[i][j];
            averageG += G[i][j];
            averageB += B[i][j];
            absolutes += abs_gr(R[i][j]) * abs_gr(G[i][j]) * abs_gr(B[i][j]);
        }
    }

    absolutes /= H;
    absolutes /= W;

    averageR /= H;
    averageR /= W;
    averageR /= 255.0;

    averageG /= H;
    averageG /= W;
    averageG /= 255.0;

    averageB /= H;
    averageB /= W;
    averageB /= 255.0;

    double average = (averageR + averageG + averageB) / 3.0;
    double averageRGB = (0.20 * averageR + 0.55 * averageG + 0.25 * averageB);

    double num = s.size();
    
    if(absolutes >= 0.33){///1 and 4
        if(average <= 0.59){
            return 4;
        }        
        else{
            return 1;
        }
    }
    else{///2 and 3 and sometimes 4
        if(average >= 0.40 && averageRGB >= 0.439){
            return 3;
        }
        else if(num >= 45000){
            return 2;
        }
        else{
            return 4;
        }
    }
    
    printf("%.6f ",num);
    printf("%.6f ",average);
    printf("%.6f ",averageR);
    printf("%.6f ",averageG);
    printf("%.6f ",averageB);
    printf("%.6f ",averageRGB);
    printf("%.6f ",absolutes);

    

    return -1;
}

컴파일 시 표준 에러 (stderr) 메시지

artclass.cpp: In function 'int style(int, int, int (*)[500], int (*)[500], int (*)[500])':
artclass.cpp:31:12: warning: unused variable 'area' [-Wunused-variable]
     double area = 0;
            ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...