제출 #57265

#제출 시각아이디문제언어결과실행 시간메모리
57265thiago4532무지개나라 (APIO17_rainbow)C++17
11 / 100
29 ms2396 KiB
#include <bits/stdc++.h>
#include "rainbow.h"

using namespace std;
const int maxn = 60;
bool mat[maxn][maxn];
int l[] = {-1, 1, 0, 0};
int c[] = {0, 0, -1, 1};
int n, m, pi, pj, mark[maxn][maxn];
int num=0;
int li, lj, ri, rj;

void dfs(int i, int j){
	for(int k=0; k<4; k++){
		int i2 = i+l[k], j2 = j+c[k];
		if(i2 < li || i2 > ri || j2 < lj || j2 > rj || mat[i2][j2] || mark[i2][j2]) continue;
		mark[i2][j2] = mark[i][j];
		dfs(i2, j2);
	}
}

void init(int R, int C, int sr, int sc, int M, char *S) {
	n = R, m = C;
	pi = sr, pj = sc;

	mat[sr][sc] = 1;	
	for(int i=0;i<M;i++){
		if(S[i] == 'N') --sr;
		else if(S[i] == 'S') ++sr;
		else if(S[i] == 'W') --sc;
		else if(S[i] == 'E') ++sc;

		mat[sr][sc] = 1;
	}
}

int colour(int ar, int ac, int br, int bc) {
    num = 0;
    li = ar, lj = ac, ri = br, rj = bc;
    for(int i=li;i<=ri;i++){
    	for(int j=lj;j<=rj;j++){
    		mark[i][j] = 0;
    	}
    }
    for(int i=li;i<=ri;i++){
    	for(int j=lj;j<=rj;j++){
    		if(mark[i][j] || mat[i][j]) continue;
    		mark[i][j] = ++num;
    		dfs(i, j);
    	}
    }
    return num;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...