# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
513606 | 600Mihnea | 미술 수업 (IOI13_artclass) | C++17 | 128 ms | 19292 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |