# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
900178 | vjudge1 | 무지개나라 (APIO17_rainbow) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define ii pair<int,int>
const int N = 55;
int grid[N][N];
int rows, cols;
map<char,ii> to = {{'N', {-1, 0}}, {'S', {1, 0}}, {'W', {0, -1}}, {'E', {0, 1}}};
void init(int R, int C, int sr, int sc, int M, string s){
rows = R;
cols = C;
sr--, sc--;
ii pos = {sr, sc};
grid[pos.first][pos.second] = 1;
for(char c : s){
pos.first += to[c].first;
pos.second += to[c].second;
grid[pos.first][pos.second] = 1;
}
}
void clear(){
for(int i=0; i<rows; ++i){
for(int j=0; j<cols; ++j){
if(grid[i][j] == 2) grid[i][j] = 0;
}
}
}
vector<ii> mov = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
void dfs(int i, int j, int ar, int ac, int br, int bc){
for(auto tmp : mov){
int ni = i + tmp.first;
int nj = j + tmp.second;
if(ni >= ar && ni <= br && nj >= ac && nj <= bc && grid[ni][nj] == 0){
grid[ni][nj] = 2;
dfs(ni, nj, ar, ac, br, bc);
}
}
}
int colours(int ar, int ac, int br, int bc){
ar--, ac--;
br--, bc--;
int ans = 0;
for(int i=ar; i<=br; ++i){
for(int j=ac; j<=bc; ++j){
if(grid[i][j] == 0){
ans++;
grid[i][j] = 2;
dfs(i, j, ar, ac, br, bc);
}
}
}
clear();
return ans;
}