제출 #981208

#제출 시각아이디문제언어결과실행 시간메모리
981208pcc무지개나라 (APIO17_rainbow)C++17
11 / 100
10 ms860 KiB
#include "rainbow.h"
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int,int>
#define fs first
#define sc second

const int mxn = 55;
pii dir[] = {{0,1},{0,-1},{1,0},{-1,0}};
int arr[mxn][mxn];

void init(int R, int C, int sr, int sc, int M, char *S) {
	memset(arr,0,sizeof(arr));
	pii now = pii(sr,sc);
	arr[now.fs][now.sc] = -1;
	for(int i = 0;i<M;i++){
		if(S[i] == 'N')now.fs--;
		else if(S[i] == 'S')now.fs++;
		else if(S[i] == 'E')now.sc++;
		else if(S[i] == 'W')now.sc--;
		arr[now.fs][now.sc] = -1;
	}
	return;
}

int brr[mxn][mxn];

void dfs(int r,int c,int ar,int ac,int br,int bc){
	if(brr[r][c])return;
	brr[r][c] = 1;
	for(auto &d:dir){
		int nr = r+d.fs,nc = c+d.sc;
		if(nr<ar||nc<ac||nr>br||nc>bc||brr[nr][nc])continue;
		dfs(nr,nc,ar,ac,br,bc);
	}
	return;
}

int colour(int ar, int ac, int br, int bc) {
	int ans = 0;
	for(int i = ar;i<=br;i++)for(int j = ac;j<=bc;j++)brr[i][j] = arr[i][j];
	for(int i = ar;i<=br;i++){
		for(int j = ac;j<=bc;j++){
			if(!brr[i][j])ans++,dfs(i,j,ar,ac,br,bc);
		}
	}
	return ans;
}

#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...