# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
69868 | FLDutchman | 미술 수업 (IOI13_artclass) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "artclass.h"
#include <bits/stdc++.h>
using namespace std;
typedef int INT;
#define FOR(i,l,r) for(int i = (l); i < (r); i++)
#define fst first
#define snd second
#define pb push_back
#define mp make_pair
#define V vector
#define int long long
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<vi> vvi;
typedef vector<ii> vii;
const int NMAX = 1e5+10;
double sqr(double x) {return x * x;}
struct color{
double r, g, b;
double l;
color (){}
color (int r, int g, int b) : r(r), g(g), b(b) {l = sqrt(r*r + g*g + b*b);}
int operator- (const color &c) {
//cerr<<r/l<<endl;
return abs(l-c.l); //abs(r/l-c.r/c.l) + abs(g/l-c.g/c.l) + abs(b/l-c.b/c.l);
}
};
V<V<color>> canvas(0);
int H = 0, W = 0;
double diff(){
double tot = 0;
double div = 0;
FOR(i, 1, H) FOR(j, 1, W){
if(i > 0) {tot += canvas[i][j] - canvas[i-1][j]; div++;}
if(j > 0) {tot += canvas[i][j] - canvas[i][j-1]; div++;}
}
return tot / div;
}
double diff(string s){
ifstream fin(s);
fin >> H >> W;
canvas.assign(H, V<color>(W));
FOR(i, 0, H) FOR(j, 0, W){
int r,g,b;
fin>>r>>g>>b;
canvas[i][j] = {r, g, b};
}
double tot = 0;
double div = 0;
FOR(i, 0, H) FOR(j, 0, W){
if(i > 0) {tot += canvas[i][j] - canvas[i-1][j]; div += 1;}
if(j > 0) {tot += canvas[i][j] - canvas[i][j-1]; div += 1;}
}
return tot / div;
}
INT style(INT h, INT w, INT R[500][500], INT G[500][500], INT B[500][500]) {
H=h; W=w;
canvas.assign(H, V<color>(W));
FOR(i, 0, H) FOR(j, 0, W){
canvas[i][j] = color(R[i][j], G[i][j], B[i][j]);
}
double k = 10 * diff();
if(k <= 40) return 4;
if(k <= 115) return 1;
if(k <= 300) return 2;
return 3;
}
signed main(){
cout << setprecision(3);
FOR(style, 1, 5) {
FOR(i, 1, 10) cout << (int) (10*diff("style-"+to_string(style)+"-"+to_string(i)+".txt") ) << "\t";
cout << endl;
}
}