제출 #513606

#제출 시각아이디문제언어결과실행 시간메모리
513606600MihneaArt Class (IOI13_artclass)C++17
100 / 100
128 ms19292 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; } const int C = 2; ld devi(int type, int n, int m, int a[500][500]) { if (type == 0) { 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); } if (type == 1) { 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); } assert(0); } vector<ld> rr[C][5]; vector<ld> gg[C][5]; vector<ld> bb[C][5]; ld devi_r[C][5]; ld devi_g[C][5]; ld devi_b[C][5]; bool gen = 0; int step = 0; void loaddata(); 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++; for (int u = 0; u < C; u++) { rr[u][type].push_back(devi(u, n, m, r)); gg[u][type].push_back(devi(u, n, m, g)); bb[u][type].push_back(devi(u, n, m, b)); } if (step == 4 * 9) { for (int u = 0; u < C; u++) { for (int i = 1; i <= 4; i++) { cout << "devi_r[" << u << "][" << i << "] = " << getmean(rr[u][i]) << ";\n"; cout << "devi_g[" << u << "][" << i << "] = " << getmean(gg[u][i]) << ";\n"; cout << "devi_b[" << u << "][" << i << "] = " << getmean(bb[u][i]) << ";\n"; } } } } else { loaddata(); for (int u = 0; u < C; u++) { devi_r[u][0] = devi(u, n, m, r); devi_g[u][0] = devi(u, n, m, g); devi_b[u][0] = devi(u, n, m, b); } ld min_loss = (ld) 1e9; int sol = -1; for (int type = 1; type <= 4; type++) { ld loss = 0; for (int u = 0; u < C; u++) { loss += abs(devi_r[u][0] - devi_r[u][type]); loss += abs(devi_g[u][0] - devi_g[u][type]); loss += abs(devi_b[u][0] - devi_b[u][type]); } if (loss < min_loss) { min_loss = loss; sol = type; } } assert(sol != -1); assert(1 <= sol && sol <= 4); return sol; } return 777; } void loaddata() { devi_r[0][1] = 5.76637; devi_g[0][1] = 5.73766; devi_b[0][1] = 6.20445; devi_r[0][2] = 10.9656; devi_g[0][2] = 10.7493; devi_b[0][2] = 10.217; devi_r[0][3] = 29.1632; devi_g[0][3] = 29.0347; devi_b[0][3] = 28.3929; devi_r[0][4] = 1.95037; devi_g[0][4] = 1.76529; devi_b[0][4] = 2.04362; devi_r[1][1] = 3.97219; devi_g[1][1] = 3.99654; devi_b[1][1] = 4.11924; devi_r[1][2] = 6.91017; devi_g[1][2] = 6.85403; devi_b[1][2] = 6.68645; devi_r[1][3] = 19.0843; devi_g[1][3] = 19.0358; devi_b[1][3] = 18.7323; devi_r[1][4] = 1.25593; devi_g[1][4] = 1.09269; devi_b[1][4] = 1.22006; }
#Verdict Execution timeMemoryGrader output
Fetching results...