Submission #513604

#TimeUsernameProblemLanguageResultExecution timeMemory
513604600MihneaArt Class (IOI13_artclass)C++17
96 / 100
90 ms11496 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 = 1; i + 1 < n; i++) {
    for (int j = 1; j + 1 < m; j++) {
      ld sum = 0;
      sum += a[i - 1][j - 1] + a[i - 1][j] + a[i - 1][j + 1];
      sum += a[i][j - 1] + a[i][j] + a[i][j + 1];
      sum += a[i + 1][j - 1] + a[i + 1][j] + a[i + 1][j + 1];
      all.push_back(abs(a[i][j] - sum / 9));
    }
  }
  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] = 3.97219;
    devi_g[1] = 3.99654;
    devi_b[1] = 4.11924;
    devi_r[2] = 6.91017;
    devi_g[2] = 6.85403;
    devi_b[2] = 6.68645;
    devi_r[3] = 19.0843;
    devi_g[3] = 19.0358;
    devi_b[3] = 18.7323;
    devi_r[4] = 1.25593;
    devi_g[4] = 1.09269;
    devi_b[4] = 1.22006;
    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...