제출 #1217378

#제출 시각아이디문제언어결과실행 시간메모리
1217378omsincoconut미술 수업 (IOI13_artclass)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

double takepw(double x) {return pow(x, 2);}

double difference_mean(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    double sum = 0;
    for (int i = 1; i < H; i++) {
        for (int j = 1; j < W; j++) {
            sum += takepw(0.299*abs(R[i][j]-R[i-1][j]) + 0.587*abs(G[i][j]-G[i-1][j]) + 0.114*abs(B[i][j]-B[i-1][j]));
            sum += takepw(0.299*abs(R[i][j]-R[i][j-1]) + 0.587*abs(G[i][j]-G[i][j-1]) + 0.114*abs(B[i][j]-B[i][j-1]));
        }
    }
    return sum/(H*W);
}

double info[5][2] = {
    {0,0},
    {546.836, 278.832},
    {511.457, 351.962},
    {3388.283, 1561.624/2},
    {27.279, 20.547/2}
};

double takepw_2(double x) {return pow(x, 1);}

double difference_mean_2(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    double sum = 0;
    for (int i = 1; i < H; i++) {
        for (int j = 1; j < W; j++) {
            sum += takepw_2(0.299*abs(R[i][j]-R[i-1][j]) + 0.587*abs(G[i][j]-G[i-1][j]) + 0.114*abs(B[i][j]-B[i-1][j]));
            sum += takepw_2(0.299*abs(R[i][j]-R[i][j-1]) + 0.587*abs(G[i][j]-G[i][j-1]) + 0.114*abs(B[i][j]-B[i][j-1]));
        }
    }
    return sum/(H*W);
}

double info_2[5][2] = {
    {0,0},
    {11.551, 4.619},
    {21.419, 7.205},
    {57.704, 15.829},
    {3.685, 1.013}
};

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    double df = difference_mean(H, W, R, G, B);

    double cv = 1e9;
    int ret = 0;
    for (int i = 1; i <= 4; i++) {
        double v = (double)abs(df-info[i][0])/info[i][1];
        if (v < cv) {
            cv = v;
            ret = i;
        }
    }

    if (ret == 3 || ret== 4) return ret;

    df = difference_mean_2(H, W, R, G, B);

    cv = 1e9;
    ret = 0;
    for (int i = 1; i <= 4; i++) {
        double v = (double)abs(df-info_2[i][0])/info_2[i][1];
        if (v < cv) {
            cv = v;
            ret = i;
        }
    }

    return ret;
}

static int DIM[2];
static int R[500][500];
static int G[500][500];
static int B[500][500];

long long readfile(string filename) {
    FILE *in = fopen(filename.c_str(), "r");
    if(in == NULL) {
        puts("Failed to open input file (artclass.txt).");
        return 0;
    }
    
    if(fscanf(in, "%d%d", DIM, DIM+1) != 2) {
        printf("Line 1: H, W must be integers\n");
        return 0;
    }
    if(DIM[0] < 100 || 500 < DIM[0]) {
        printf("Line 1: 100 <= H <= 500\n");
        return 0;
    }
    if(DIM[1] < 100 || 500 < DIM[1]) {
        printf("Line 1: 100 <= W <= 500\n");
        return 0;
    }
    for(int i = 0; i< DIM[0]; i++) {
       for(int j = 0; j < DIM[1]; j++) {
           if(fscanf(in, "%d%d%d", &R[i][j], &G[i][j], &B[i][j]) != 3) {
               printf("Line %d: R[i][j], G[i][j], B[i][j] must be integers", i*DIM[1]+j+2, i, j);
               return 0;
           }
           if(R[i][j] < 0 || 255 < R[i][j]) {
               printf("Line %d: 0 <= R[%d][%d] <= 255", i*DIM[1]+j+2, i, j);
               return 0;
           }
           if(G[i][j] < 0 || 255 < G[i][j]) {
               printf("Line %d: 0 <= G[%d][%d] <= 255", i*DIM[1]+j+2, i, j);
               return 0;
           }
           if(B[i][j] < 0 || 255 < B[i][j]) {
               printf("Line %d: 0 <= B[%d][%d] <= 255", i*DIM[1]+j+2, i, j);
               return 0;
           }
       }
    }
    
    return style(DIM[0], DIM[1], R, G, B);
}

void style_investigate(int query_style) {
    long long val[9];

    for (int i = 1; i <= 9; i++) {
        string filename = "style-" + to_string(query_style) + "\\style-" + to_string(query_style) + "-" + to_string(i) + ".txt";
        val[i-1] = readfile(filename);
    }

    for (int i = 0; i < 9; i++) {
        printf("%d %d\n", query_style, val[i]);
    }
}

int main() {
    for (int i = 1; i <= 4; i++) style_investigate(i);
}

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

artclass.cpp: In function 'long long int readfile(std::string)':
artclass.cpp:103:23: warning: too many arguments for format [-Wformat-extra-args]
  103 |                printf("Line %d: R[i][j], G[i][j], B[i][j] must be integers", i*DIM[1]+j+2, i, j);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
artclass.cpp: In function 'void style_investigate(int)':
artclass.cpp:133:21: warning: format '%d' expects argument of type 'int', but argument 3 has type 'long long int' [-Wformat=]
  133 |         printf("%d %d\n", query_style, val[i]);
      |                    ~^                  ~~~~~~
      |                     |                       |
      |                     int                     long long int
      |                    %lld
/usr/bin/ld: /tmp/cc2GjrzE.o: in function `main':
grader.c:(.text.startup+0x0): multiple definition of `main'; /tmp/cc1azU6u.o:artclass.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cc2GjrzE.o: in function `main':
grader.c:(.text.startup+0x202): undefined reference to `style'
collect2: error: ld returned 1 exit status