제출 #513602

#제출 시각아이디문제언어결과실행 시간메모리
513602600Mihnea미술 수업 (IOI13_artclass)C++17
98 / 100
118 ms20344 KiB
#include "artclass.h"
#include <bits/stdc++.h>

using namespace std;

/// attention : mean everything
/// clustering

typedef long double ld;

ld getmean(vector<ld> guys) {
  if (guys.empty()) {
    return 0;
  }
  ld sum = 0;
  for (auto &x : guys) {
    sum += x;
  }
  sum /= (ld) ((int) guys.size());
  return sum;
}

ld devi(int n, int m, int a[500][500]) {
  vector<ld> all;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (i + 1 < n) all.push_back(abs(a[i][j] - a[i + 1][j]));
      if (j + 1 < m) all.push_back(abs(a[i][j] - a[i][j + 1]));
    }
  }
  return getmean(all);
}

vector<ld> rr[5];
vector<ld> gg[5];
vector<ld> bb[5];
ld devi_r[5];
ld devi_g[5];
ld devi_b[5];

bool gen = 0;
int step = 0;

int style(int n, int m, int r[500][500], int g[500][500], int b[500][500]) {
  if (gen) {
    int type = step / 9 + 1;
    step++;
    rr[type].push_back(devi(n, m, r));
    gg[type].push_back(devi(n, m, g));
    bb[type].push_back(devi(n, m, b));
    if (step == 4 * 9) {
      for (int i = 1; i <= 4; i++) {
        cout << "devi_r[" << i << "] = " << getmean(rr[i]) << ";\n";
        cout << "devi_g[" << i << "] = " << getmean(gg[i]) << ";\n";
        cout << "devi_b[" << i << "] = " << getmean(bb[i]) << ";\n";
      }
    }
  } else {
    devi_r[1] = 5.76637;
    devi_g[1] = 5.73766;
    devi_b[1] = 6.20445;
    devi_r[2] = 10.9656;
    devi_g[2] = 10.7493;
    devi_b[2] = 10.217;
    devi_r[3] = 29.1632;
    devi_g[3] = 29.0347;
    devi_b[3] = 28.3929;
    devi_r[4] = 1.95037;
    devi_g[4] = 1.76529;
    devi_b[4] = 2.04362;
    ld my_devi_r = devi(n, m, r);
    ld my_devi_g = devi(n, m, g);
    ld my_devi_b = devi(n, m, b);
    ld min_loss = (ld) 1e9;
    int sol = -1;
    for (int type = 1; type <= 4; type++) {
      ld loss = 0;
      loss += abs(my_devi_r - devi_r[type]);
      loss += abs(my_devi_g - devi_g[type]);
      loss += abs(my_devi_b - devi_b[type]);
      if (loss < min_loss) {
        min_loss = loss;
        sol = type;
      }
    }
    assert(sol != -1);
    assert(1 <= sol && sol <= 4);
    return sol;
  }
  return 777;
}

#Verdict Execution timeMemoryGrader output
Fetching results...