Submission #885602

#TimeUsernameProblemLanguageResultExecution timeMemory
885602gustavo_d미술 수업 (IOI13_artclass)C++17
100 / 100
67 ms8408 KiB
#include "artclass.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
mt19937 randn(time(0));

struct Pixel {
	int r, g, b;
	
	Pixel() {
		r=-1, g=-1; b=-1;
	}
	
	Pixel(int red, int green, int blue) {
		r = red; g = green; b = blue;
	}
	
	bool operator != (Pixel &pixel) {
		if (pixel.r != r or pixel.g != g or pixel.b != b) return true;
		return false;
	}
};

int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
	Pixel img[H][W];
	
	for (int i=0; i<H; i++) {
		for (int j=0; j<W; j++) {
			img[i][j] = Pixel(R[i][j], G[i][j], B[i][j]);
		}
	}
	
	ll total_dist = 0;
	for (int i=1; i<H-1; i++) {
		for (int j=1; j<W-1; j++) {
			vector<int> dif(3);
			dif = {-1, 0, 1};
			for (int di : dif) {
				for (int dj : dif) {
					total_dist += abs(img[i][j].r - img[i+di][j+dj].r);
					total_dist += abs(img[i][j].g - img[i+di][j+dj].g);
					total_dist += abs(img[i][j].b - img[i+di][j+dj].b);
				}
			}
		}
	}
	total_dist /= ((ll)H*(ll)W); // 450+ é 3
	
	double changes = 0;
	for (int i=0; i<H; i++) {
		Pixel last = img[i][0];
		for (int j=1; j<W; j++) {
			if (last != img[i][j]) changes++;
			last = img[i][j];
		}
	}
	changes *= 100.0 / H; // pra porcentagem
	changes /= W; // 95%+ é 2 ou 3
	
	double r=0, g=0, b=0;
	for (int i=0; i<H; i++) {
		for (int j=0; j<W; j++) {
			if (img[i][j].r > img[i][j].g and img[i][j].r > img[i][j].b) r++;
			if (img[i][j].g > img[i][j].r and img[i][j].g > img[i][j].b) g++;
			if (img[i][j].b > img[i][j].g and img[i][j].b > img[i][j].r) b++;
		}
	}
	double red = r / (W * H);
	double green = g / (W * H);
	double blue = b / (W * H);
	
	//cout << red << ' ' << green << ' ' << blue << '\n';
	
	if (changes >= 97 and green >= 0.01) {
		// 2 ou 3 > mais verde
		if (total_dist >= 450) return 3; // dividir pelo tamanho da imagem
		else return 2;
	} else {
		// 1 ou 4
		if (total_dist <= 100) return 4;
		else return 1;
	}
    
    return 4;
}

Compilation message (stderr)

artclass.cpp: In function 'int style(int, int, int (*)[500], int (*)[500], int (*)[500])':
artclass.cpp:69:9: warning: unused variable 'red' [-Wunused-variable]
   69 |  double red = r / (W * H);
      |         ^~~
artclass.cpp:71:9: warning: unused variable 'blue' [-Wunused-variable]
   71 |  double blue = b / (W * H);
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...