Submission #1236429

#TimeUsernameProblemLanguageResultExecution timeMemory
1236429fv3Mosaic (IOI24_mosaic)C++20
22 / 100
88 ms25416 KiB
#include "mosaic.h"

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

vector<ll> mosaic(vector<int> X, vector<int> Y,
                  vector<int> T, vector<int> B,
                  vector<int> L, vector<int> R) {

    const int n = X.size();
    vector<vector<int>> grid(n, vector<int>(3));

    swap(grid[0], X);
    for (int i = 0; i < n; i++) {
        grid[i][0] = Y[i];
    }

    for (int i = 1; i < min(3, n); i++) {
        grid[i].resize(n);
        for (int j = 1; j < n; j++) {
            grid[i][j] = !(grid[i-1][j] || grid[i][j-1]);
        }
    }

    for (int i = 3; i < n; i++) {
        for (int j = 1; j < 3; j++) {
            grid[i][j] = !(grid[i-1][j] || grid[i][j-1]);
        }
    }

    vector<int> diag(2*n-1);
    for (int i = 2; i < n; i++) {
        if (grid[2][i]) {
            diag[i-2 + n] = 1;
        }
        if (grid[i][2]) {
            diag[2-i + n] = 1;
        }
    }

    int q = (int)T.size();
    vector<ll> C(q, 0);

    for (int qq = 0; qq < q; qq++) {
        assert(T[qq] == B[qq] && L[qq] == R[qq]);

        if (min(T[qq], R[qq]) < 3) {
            C[qq] = grid[T[qq]][R[qq]];
        } else {
            C[qq] = diag[R[qq] - T[qq] + n];
        }
    }

    return C;
}

//#include "grader.cpp"
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...