제출 #1170862

#제출 시각아이디문제언어결과실행 시간메모리
1170862KasymK무지개나라 (APIO17_rainbow)C++20
11 / 100
2604 ms1452 KiB
#include "bits/stdc++.h"
#include "rainbow.h"
using namespace std;
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define ll long long
#define pb push_back
#define pii pair<int, int>
#define pli pair<ll, int>
#define pll pair<ll, ll>
#define tr(i, c) for(auto i = c.begin(); i != c.end(); ++i)
#define wr puts("----------------")
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
const int N = 55;
bool v[N][N], vis[N][N];
int n, n1, m1, m, dx[]={1, -1, 0, 0}, dy[]={0, 0, 1, -1};

bool is(int x, int y){
    return (x>=n and x<=n1 and y>=m and y<=m1 and !v[x][y] and !vis[x][y]);
}

void dfs(int x, int y){
    v[x][y]=1;
    for(int ad = 0; ad < 4; ++ad)
        if(is(x+dx[ad], y+dy[ad])){
            v[x+dx[ad]][y+dy[ad]]=1;
            dfs(x+dx[ad], y+dy[ad]);
        }
}

void init(int r, int c, int sr, int sc, int M, char *s){
    vis[sr][sc]=1;
    // n=r, m=c;
    for(int i = 0; i < M; ++i){
        if(s[i] == 'N')
            sr--;
        if(s[i] == 'E')
            sc++;
        if(s[i] == 'W')
            sc--;
        if(s[i] == 'S')
            sr++;
        vis[sr][sc]=1;
    }
}

int colour(int ar, int ac, int br, int bc){
    n=ar, n1=br, m=ac, m1=bc;
    memset(v, 0, sizeof v);
    int ret=0;
    for(int i = ar; i <= br; ++i)
        for(int j = ac; j <= bc; ++j)
            if(!v[i][j] and !vis[i][j]){
                ret++;
                dfs(i, j);
            }
    return ret;
}
#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...