Submission #18020

#TimeUsernameProblemLanguageResultExecution timeMemory
18020suhgyuho_williamArt Class (IOI13_artclass)C++98
56 / 100
152 ms19284 KiB
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>

using namespace std;

int N,M,ans;
int R[502][502],G[502][502],B[502][502];
int cntr[256],cntg[256],cntb[256];
int print;
int a[502][502][3];
bool check[502][502];
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};

int t,nextx,nexty;
int pcnt;
void dfs(int x,int y){
	check[x][y] = true;
	pcnt++;
	for(t=0; t<4; t++){
		nextx = x+dx[t]; nexty = y+dy[t];
		if(nextx <1 || nextx > N || nexty < 1 || nexty > M) continue;
		if(!check[nextx][nexty] && abs(R[x][y]-R[nextx][nexty])+abs(G[x][y]-G[nextx][nexty])+abs(B[x][y]-B[nextx][nexty]) < 42) dfs(nextx,nexty);
	}
}

int x[200000],rear;
double dd;
void process(){
	int i,j;
	int r,g,b;
	int maxr,maxg,maxb;
	int cnt = 15;
	int dfscnt = 0;
	int big,tmp;

	r = g = b = 0;
	for(i=0; i<=255; i++) cntr[i] = cntg[i] = cntb[i] = 0;
	for(i=1; i<=N; i++) for(j=1; j<=M; j++){ cntr[R[i][j]]++; cntg[G[i][j]]++; cntb[B[i][j]]++; }
	for(i=0; i<=255; i++){
		if(cntr[i] > cnt) r++;
		if(cntg[i] > cnt) g++;
		if(cntb[i] > cnt) b++;
	}
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) a[i][j][0] = R[i][j];
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) a[i][j][1] = G[i][j];
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) a[i][j][2] = B[i][j];
	//printf("%4d %4d %4d %4d  ",r,g,b,r+g+b);
	maxr = maxg = maxb = 0;
	for(i=0; i<=255; i++){
		maxr = max(maxr,cntr[i]);
		maxg = max(maxg,cntg[i]);
		maxb = max(maxb,cntb[i]);
	}
	//printf("%7d    ",maxr+maxg+maxb);
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) check[i][j] = false;
	big = rear = 0;
	for(i=1; i<=N; i++){
		for(j=1; j<=M; j++){
			if(!check[i][j]){
				pcnt = 0;
				dfs(i,j);
				dfscnt++;
				x[dfscnt] = pcnt;
			}
		}
	}
	//printf("%d ",dfscnt);
	if(dfscnt <= 650){ print = 4; return; }
	sort(x+1,x+dfscnt+1);
	for(i=max(1,dfscnt-8); i<=dfscnt; i++) big += x[i];
	dd = 0;
	for(i=2; i<=N; i++) for(j=2; j<=M; j++) dd += (abs(R[i][j]-R[i][j-1])+abs(G[i][j]-G[i][j-1])+abs(B[i][j]-B[i][j-1]));
	dd /= (double)(N*M);
	//printf("%lf\n",dd);
	if(dd >= 54){ print = 3; return; }
	dd = 0;
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) dd += (G[i][j]);
	dd /= (double)(N*M);
	if(dd < 90){ print = 2; return; }
	else print = 1;
	//printf("%lf\n",dd);
}

void input(){
	int i,j;
	scanf("%d %d",&N,&M);
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d",&R[i][j]);
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d",&G[i][j]);
	for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d",&B[i][j]);
}
/*
void testing(){
	int i,j,k;
	FILE *in = fopen("input1.txt","r");
	FILE *in2 = fopen("input2.txt","r");
	FILE *in3 = fopen("input3.txt","r");
	FILE *in4 = fopen("input4.txt","r");

	for(i=1; i<=9; i++){
		fscanf(in,"%d %d",&N,&M);
		ans = 1;
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in,"%d",&R[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in,"%d",&G[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in,"%d",&B[j][k]);
		process();
	}
	printf("\n");
	for(i=1; i<=9; i++){
		fscanf(in2,"%d %d",&N,&M);
		ans = 2;
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in2,"%d",&R[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in2,"%d",&G[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in2,"%d",&B[j][k]);
		process();
	}
	printf("\n");
	for(i=1; i<=9; i++){
		fscanf(in3,"%d %d",&N,&M);
		ans = 3;
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in3,"%d",&R[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in3,"%d",&G[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in3,"%d",&B[j][k]);
		process();
	}
	printf("\n");
	for(i=1; i<=9; i++){
		fscanf(in4,"%d %d",&N,&M);
		ans = 4;
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in4,"%d",&R[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in4,"%d",&G[j][k]);
		for(j=1; j<=N; j++) for(k=1; k<=M; k++) fscanf(in4,"%d",&B[j][k]);
		process();
	}
}

int main(void){
	freopen("input.txt","r",stdin);
	input();
	//process(); printf("%d",print);
	testing();

	return 0;
}
*/

#include "artclass.h"
#include<stdlib.h>

int style(int H, int W, int rr[500][500], int gg[500][500], int bb[500][500]) {
    N = H; M = W;
    int i,j;

    for(i=1; i<=N; i++) for(j=1; j<=M; j++){ R[i][j] = rr[i-1][j-1]; G[i][j] = gg[i-1][j-1]; B[i][j] = bb[i-1][j-1]; }
    process();
    return print;
}

Compilation message (stderr)

artclass.cpp: In function 'void process()':
artclass.cpp:36:10: warning: unused variable 'tmp' [-Wunused-variable]
  int big,tmp;
          ^~~
artclass.cpp: In function 'void input()':
artclass.cpp:88:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&N,&M);
  ~~~~~^~~~~~~~~~~~~~~
artclass.cpp:89:47: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d",&R[i][j]);
                                          ~~~~~^~~~~~~~~~~~~~~
artclass.cpp:90:47: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d",&G[i][j]);
                                          ~~~~~^~~~~~~~~~~~~~~
artclass.cpp:91:47: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(i=1; i<=N; i++) for(j=1; j<=M; j++) scanf("%d",&B[i][j]);
                                          ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...