Submission #406460

#TimeUsernameProblemLanguageResultExecution timeMemory
406460aryan12Land of the Rainbow Gold (APIO17_rainbow)C++17
11 / 100
3067 ms2084 KiB
#include "rainbow.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 55;
bool isRiver[N][N], vis[N][N];
char direction[4] = {'N', 'S', 'E', 'W'};
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, 1, -1};

void init(int R, int C, int sr, int sc, int M, char *S) {
    for(int i = 1; i <= R; i++) {
        for(int j = 1; j <= C; j++) {
            isRiver[i][j] = false;
        }
    }
    isRiver[sr][sc] = true;
    for(int i = 0; i < M; i++) {
        for(int j = 0; j < 4; j++) {
            if(direction[j] == S[i]) {
                sr += dx[j];
                sc += dy[j];
                isRiver[sr][sc] = true;
                break;
            }
        }
    }
    /*for(int i = 1; i <= R; i++) {
        for(int j = 1; j <= C; j++) {
            cout << isRiver[i][j] << " ";
        }
        cout << "\n";
    }*/
}

void DoBfs(int row_min, int col_min, int row_max, int col_max, int cur_row, int cur_col) {
    queue<pair<int, int> > bfs;
    bfs.push({cur_row, cur_col});
    vis[cur_row][cur_col] = true;
    while(!bfs.empty()) {
        cur_row = bfs.front().first, cur_col = bfs.front().second;
        bfs.pop();
        for(int i = 0; i < 4; i++) {
            if(vis[cur_row + dx[i]][cur_col + dy[i]] || isRiver[cur_row + dx[i]][cur_col + dy[i]])
                continue;
            if(cur_row + dx[i] < row_min || cur_row + dx[i] > row_max)
                continue;
            if(cur_col + dy[i] < col_min || cur_col + dy[i] > col_max)
                continue;
            bfs.push({cur_row + dx[i], cur_col + dy[i]});
            vis[cur_row + dx[i]][cur_col + dy[i]] = true;
        }
    }
}

int colour(int ar, int ac, int br, int bc) {
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++) {
            vis[i][j] = false;
        }
    }
    int cnt = 0;
    for(int i = ar; i <= br; i++) {
        for(int j = ac; j <= bc; j++) {
            if(!vis[i][j] && !isRiver[i][j]) {
                DoBfs(ar, ac, br, bc, i, j);
                cnt++;
            }
        }
    }
    return cnt;
}
#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...