제출 #1341781

#제출 시각아이디문제언어결과실행 시간메모리
1341781North1304Art Class (IOI13_artclass)C++20
0 / 100
55 ms3324 KiB
#include "artclass.h"
#include <cmath>
#include <vector>
const double conv_w[4][3][3][3] = {{{{0.1,0.2,-0.1},{-0.2,0.1,0.3},{0.0,-0.1,0.2}},{{0.2,-0.1,0.1},{0.1,0.2,-0.2},{-0.1,0.1,-0.1}},{{-0.2,0.3,0.1},{0.1,-0.1,0.2},{0.2,0.1,-0.3}}},{{{-0.1,0.1,0.2},{0.2,-0.2,0.1},{0.1,0.3,-0.1}},{{0.3,-0.1,0.2},{-0.1,0.2,0.1},{0.2,-0.2,0.1}},{{0.1,0.2,-0.1},{0.1,-0.1,0.2},{-0.2,0.1,0.3}}},{{{0.2,0.1,-0.2},{-0.1,0.3,0.1},{0.1,-0.2,0.2}},{{-0.2,0.1,0.3},{0.2,-0.1,0.1},{0.1,0.2,-0.1}},{{0.1,-0.2,0.1},{0.3,0.1,-0.2},{-0.1,0.2,0.1}}},{{{-0.1,0.2,0.1},{0.1,-0.2,0.3},{0.2,0.1,-0.1}},{{0.2,-0.1,0.1},{-0.1,0.3,-0.2},{0.1,0.2,0.1}},{{0.1,0.3,-0.1},{-0.2,0.1,0.2},{0.1,-0.1,0.2}}}};
const double conv_b[4] = {0.1, -0.2, 0.3, -0.1};
const double dense_w[4][4] = {{0.5,-0.2,0.1,0.3},{-0.1,0.6,-0.3,0.2},{0.2,-0.1,0.7,-0.4},{0.3,0.2,-0.1,0.5}};
const double dense_b[4] = {-0.1, 0.2, -0.3, 0.4};
int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    double pool[4] = {0};
    int count = 0;
    for (int i = 1; i < H - 1; i += 5) {
        for (int j = 1; j < W - 1; j += 5) {
            count++;
            for (int f = 0; f < 4; ++f) {
                double val = conv_b[f];
                for (int di = -1; di <= 1; ++di) {
                    for (int dj = -1; dj <= 1; ++dj) {
                        val += (R[i+di][j+dj] / 255.0) * conv_w[f][0][di+1][dj+1];
                        val += (G[i+di][j+dj] / 255.0) * conv_w[f][1][di+1][dj+1];
                        val += (B[i+di][j+dj] / 255.0) * conv_w[f][2][di+1][dj+1];
                    }
                }
                if (val > 0) pool[f] += val;
            }
        }
    }
    double out[4] = {0};
    int best_class = 1;
    double max_val = -1e9;
    for (int c = 0; c < 4; ++c) {
        pool[c] /= count;
        out[c] = dense_b[c];
        for (int f = 0; f < 4; ++f) {
            out[c] += pool[f] * dense_w[c][f];
        }
        if (out[c] > max_val) {
            max_val = out[c];
            best_class = c + 1;
        }
    }
    return best_class;
}
#Verdict Execution timeMemoryGrader output
Fetching results...