제출 #97529

#제출 시각아이디문제언어결과실행 시간메모리
97529tincamatei미술 수업 (IOI13_artclass)C++14
0 / 100
128 ms24944 KiB
#include "artclass.h"
#include <bits/stdc++.h>

const int SAMECOLOR = 100;

int H, W, R[500][500], G[500][500], B[500][500];
bool viz[500][500];

int comp;

int neoplastic() {
	return -abs(comp - 100);
}

int impressionist() {
	return -abs(comp - 500);
}

int expressionist() {
	return -abs(comp - 7000);
}

int colourfield() {
	return -abs(comp - 5);
}

int dl[] = {0, 1, 0, -1};
int dc[] = {1, 0,-1,  0};

void dfs(int l, int c) {
	viz[l][c] = true;
	for(int i = 0; i < 4; ++i) {
		int ln = l + dl[i];
		int cn = c + dc[i];
		if(0 <= ln && ln < H && 0 <= cn && cn < W && !viz[ln][cn] &&
		   abs(R[l][c] - R[ln][cn]) + 
			 abs(G[l][c] - G[ln][cn]) + 
			 abs(B[l][c] - B[ln][cn]) <= SAMECOLOR) {
			dfs(ln, cn);
		}
	}
}

void getData() {
	for(int i = 0; i < H; ++i)
		for(int j = 0; j < W; ++j)
			if(!viz[i][j]) {
				dfs(i, j);
				comp++;
			}
}

int style(int _H, int _W, int _R[500][500], int _G[500][500], int _B[500][500]) {
	H = _H;
	W = _W;
	for(int i = 0; i < H; ++i)
		for(int j = 0; j < W; ++j) {
			R[i][j] = _R[i][j];
			G[i][j] = _G[i][j];
			B[i][j] = _B[i][j];
		}
	
	getData();

	int score[4] = {neoplastic(), impressionist(), expressionist(), colourfield()};
	
	printf("NR COMP %d\n", comp);

	int best = -1000000000, style = -1;
	for(int i = 0; i < 4; ++i)
		if(score[i] > best) {
			best = score[i];
			style = i + 1;
		}

	return style;
}
#Verdict Execution timeMemoryGrader output
Fetching results...