Submission #1170680

#TimeUsernameProblemLanguageResultExecution timeMemory
1170680stdfloatLand of the Rainbow Gold (APIO17_rainbow)C++20
12 / 100
492 ms1114112 KiB
#include <bits/stdc++.h>
#include "rainbow.h"
// #include "grader.cpp"
using namespace std;

int n, m;

vector<vector<bool>> rv;

vector<int> p2, dX = {-1, 0, 1, 0}, dY = {0, 1, 0, -1};

vector<vector<int>> p1;

void init(int R, int C, int sr, int sc, int M, char *S) {
    n = R; m = C;

    rv.assign(n + 2, vector<bool>(m + 2));
    rv[0][0] = rv[1][0] = rv[0][m + 1] = rv[1][m + 1] = rv[sr][sc] = true;
    for (int i = 0; i < M; i++) {
        if (S[i] == 'N') sr--;
        else if (S[i] == 'S') sr++;
        else if (S[i] == 'W') sc--;
        else sc++;
    
        rv[sr][sc] = true;
    }

    p2.assign(m + 2, 0);
    p1.assign(3, vector<int>(m + 2));
    for (int i = 1; i <= m; i++) {
        p1[1][i] = p1[1][i - 1] + (!rv[1][i - 1] && rv[1][i]);
        p1[2][i] = p1[2][i - 1] + (!rv[2][i - 1] && rv[2][i]);

        p2[i] = p2[i - 1] + (rv[1][i] && rv[2][i] && !rv[1][i - 1] && !rv[2][i - 1]);
        if (!rv[1][i] && rv[1][i + 1] && rv[2][i]) p2[i]++;
        if (rv[1][i] && !rv[2][i] && rv[2][i + 1]) p2[i]++;
    }
}

int colour(int ar, int ac, int br, int bc) {
    if (ar == br) return p1[ar][bc] - p1[ar][ac] + !rv[ar][bc];

    bool tr1 = (rv[1][bc] && rv[2][bc] && !rv[1][bc - 1] && !rv[2][bc - 1]);
    bool tr2 = (rv[1][ac] && rv[2][ac] && !rv[1][ac - 1] && !rv[2][ac - 1]);
    return p2[bc - 1] - p2[ac - 1] + tr1 - tr2 + (!rv[1][bc] || !rv[2][bc]);
}
#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...