# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
200289 | 2020-02-06T08:45:52 Z | Nordway | 무지개나라 (APIO17_rainbow) | C++14 | 0 ms | 0 KB |
#include<bits/stdc++.h> #include "rainbow.h" #define x first #define y second #define pb push_back #define sz(v) (int)v.size() using namespace std; const int N=1e3+11; const int dx[4]={0,0,-1,1}; const int dy[4]={1,-1,0,0}; int n,m; int x,y; string s; bool used[N][N]; void init(int R, int C, int sr, int sc, int M, string S) { n=R; m=C; x=sr,y=sc; s=S; } void dfs(int r,int c){ used[r][c]=1; for(int i=0;i<4;i++){ int nx=x+dx[i],ny=y+dy[i]; if(used[nx][ny])continue; dfs(nx,ny); } } int colour(int ar, int ac, int br, int bc) { if(max(n,m)<=50){ int ans=0; for(int i=0;i<=n+1;i++){ for(int j=0;j<=n+1;j++){ if(ar<=i&&i<=br&&ac<=j&&j<=bc){ used[i][j]=0; continue; } used[i][j]=1; } } int sr=x,sc=y; for(int i=0;i<sz(s);i++){ used[sr][sc]=1; if(s[i]=='N')sr--; if(s[i]=='S')sr++; if(s[i]=='W')sc--; if(s[i]=='E')sc++; } for(int i=ar;i<=br;i++){ for(int j=ac;j<=bc;j++){ if(!used[i][j]){ dfs(i,j); ans++; } } } return ans; } }