Submission #200314

#TimeUsernameProblemLanguageResultExecution timeMemory
200314deepworkLand of the Rainbow Gold (APIO17_rainbow)C++14
11 / 100
34 ms1144 KiB
#include "rainbow.h"

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int N = 50;

int n, m, k;
int sx, sy;
string s;
bool bad[N][N];

int p[N*N];
int sz[N*N];
int was[N*N];

int get(int u) {
    return (p[u] == u ? u : p[u] = get(p[u]));
}

void unite(int u, int v) {
    u = get(u);
    v = get(v);
    if (u == v)
        return;
    if (sz[u] > sz[v])
        swap(u, v);
    p[u] = v;
    sz[v] += sz[u];
}

void markBads() {
    int x = sx, y = sy;
    bad[sx][sy] = true;
    for (char c : s) {
        if (c == 'N')
            x--;
        if (c == 'S')
            x++;
        if (c == 'W')
            y--;
        if (c == 'E')
            y++;
        bad[x][y] = true;
    }
}

void init(int R, int C, int sr, int sc, int M, char *S) {
    n = R;
    m = C;
    sr--;
    sc--;
    sx = sr;
    sy = sc;
    s.clear();
    for (int i = 0; i < M; i++)
        s += S[i];    
    markBads();
}

int colour(int ar, int ac, int br, int bc) {
    ar--;
    ac--;
    br--;
    bc--;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            p[i*m+j] = i*m+j;
            sz[i*m+j] = 1;
        }
    }
    for (int i = ar; i <= br; i++) {    
        for (int j = ac; j <= bc; j++) {
            if (j+1 <= bc && !bad[i][j] && !bad[i][j+1])            
                unite(i*m+j, i*m+j+1);
            if (i+1 <= br && !bad[i][j] && !bad[i+1][j])
                unite(i*m+j, (i+1)*m+j);
        }
    }
    int ans = 0;
    fill(was, was+n*m, false);
    for (int i = ar; i <= br; i++) {
        for (int j = ac; j <= bc; j++) {
            if (bad[i][j])
                continue;
            ans += !was[get(i*m+j)];
            was[get(i*m+j)] = true;
        }
    }                            
    return ans;
}
#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...