Submission #469622

#TimeUsernameProblemLanguageResultExecution timeMemory
469622alextodoranArt Class (IOI13_artclass)C++17
76 / 100
76 ms6124 KiB
/** ____ ____ ____ ____ ____ ||a |||t |||o |||d |||o || ||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\| **/ #include <bits/stdc++.h> #include "artclass.h" using namespace std; typedef long long ll; const int HW_MAX = 500; ll sq (ll a) { if(a < 0) return -sqrt(-a); return sqrt(a); } int getMess (int H, int W, int R[HW_MAX][HW_MAX], int G[HW_MAX][HW_MAX], int B[HW_MAX][HW_MAX]) { ll res = 0; for(int i = 0; i < H; i++) for(int j = 0; j < W; j++) { if(i > 0) { ll val = abs((R[i][j] + G[i][j] + B[i][j]) - (R[i - 1][j] + G[i - 1][j] + B[i - 1][j])); res += val * val; } if(j > 0) { ll val = abs((R[i][j] + G[i][j] + B[i][j]) - (R[i][j - 1] + G[i][j - 1] + B[i][j - 1])); res += val * val; } } res = sq(res) * 1000; res /= (H * W); return res; } int getGreen (int H, int W, int R[HW_MAX][HW_MAX], int G[HW_MAX][HW_MAX], int B[HW_MAX][HW_MAX]) { ll res = 0; for(int i = 0; i < H; i++) for(int j = 0; j < W; j++) { if(G[i][j] > R[i][j] && G[i][j] > B[i][j] + 30) res += 10000; } res /= (H * W); return res; } int getWhite (int H, int W, int R[HW_MAX][HW_MAX], int G[HW_MAX][HW_MAX], int B[HW_MAX][HW_MAX]) { ll res = 0; for(int i = 0; i < H; i++) for(int j = 0; j < W; j++) { int mx = max({R[i][j], G[i][j], B[i][j]}); int mn = min({R[i][j], G[i][j], B[i][j]}); if(mx - mn < 40 && R[i][j] + G[i][j] + B[i][j] > 230 * 3) res += 10000; } res /= (H * W); return res; } int getBlack (int H, int W, int R[HW_MAX][HW_MAX], int G[HW_MAX][HW_MAX], int B[HW_MAX][HW_MAX]) { ll res = 0; for(int i = 0; i < H; i++) for(int j = 0; j < W; j++) { int mx = max({R[i][j], G[i][j], B[i][j]}); int mn = min({R[i][j], G[i][j], B[i][j]}); if(mx - mn < 40 && R[i][j] + G[i][j] + B[i][j] < 30 * 3) res += 10000; } res /= (H * W); return res; } int style (int H, int W, int R[HW_MAX][HW_MAX], int G[HW_MAX][HW_MAX], int B[HW_MAX][HW_MAX]) { int mess = getMess(H, W, R, G, B); int green = getGreen(H, W, R, G, B); int white = getWhite(H, W, R, G, B); int black = getBlack(H, W, R, G, B); if(mess > 300) return 3; if(green > 1500) return 2; if(mess > 200) return 3; if(white * 2 + black > 3500) return 1; if(mess < 100) return 4; return 2; }
#Verdict Execution timeMemoryGrader output
Fetching results...