제출 #1117104

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

map<char, pair<int, int>> ds;
pair<int, int> moves[4] = {
    {0, -1},
    {0, 1},
    {1, 0},
    {-1, 0},
};

bool mark[51][51];

int x, y;

void init(int R, int C, int sr, int sc, int M, char *S) {
    x=R; y=C;
    ds['N'] = {-1, 0};
    ds['S'] = {1, 0};
    ds['E'] = {0, 1};
    ds['W'] = {0, -1};
    for (int i=0; i<=50; i++) mark[i][0] = true;
    for (int i=0; i<=50; i++) mark[0][i] = true;
    mark[sr][sc] = true;
    // cout << sr << ' ' << sc << endl;
    for (int i=0; i<M; i++) {
        char c = S[i];
        sr += ds[c].first;
        sc += ds[c].second;
        mark[sr][sc] = true;
        // cout << sr << ' ' << sc << endl;
    }
}

bool tmp[51][51];
int lar, lac, lbr, lbc;
void dfs(int i, int j) {
    if (i < lar or j < lac or i > lbr or j > lbc or tmp[i][j]) return;
    tmp[i][j] = true;
    for (pair<int, int> d : moves) {
        dfs(i + d.first, j + d.second);
    }
}

int colour(int ar, int ac, int br, int bc) {
    lar = ar; lac = ac; lbr = br; lbc = bc;
    int cnt = 0;

    for (int i=1; i<=50; i++) {
        for (int j=1; j<=50; j++) {
            tmp[i][j] = mark[i][j];
        }
    }
    for (int r=ar; r<=br; r++) {
        for (int c=ac; c<=bc; c++) {
            if (!tmp[r][c]) {
                cnt++;
                dfs(r, c);
            }
        }
    }
    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...