Submission #949267

# Submission time Handle Problem Language Result Execution time Memory
949267 2024-03-19T04:40:48 Z vjudge1 Painting Walls (APIO20_paint) C++17
0 / 100
1 ms 436 KB
#include <bits/stdc++.h>

#include "paint.h"

using namespace std;

#define all(x) x.begin(), x.end()
#define ar array
#define pb push_back
#define ln '\n'
//#define int long long

using i64 = long long;

template <class F, class _S>
bool chmin(F &u, const _S &v){
    bool flag = false;
    if ( u > v ){
        u = v; flag |= true;
    }
    return flag;
}

template <class F, class _S>
bool chmax(F &u, const _S &v){
    bool flag = false;
    if ( u < v ){
        u = v; flag |= true;
    }
    return flag;
}

int minimumInstructions(int n, int m, int k, std::vector<int> C,
    std::vector<int> A, std::vector<std::vector<int>> B) {

    vector <int> R(n), L(n);
    auto match = [&](int i, int j, int s, int d){
        if ( j - i + 1 > m ){
            return false;
        }
        for (; i <= j; i++ ){
            if ( !binary_search(all(B[s]), C[i]) ){
                return false;
            } s += d;
        }
        return true;
    };
    for ( int i = 0; i < n; i++ ){
        int l = i - 1, r = n;
        while ( l + 1 < r ){
            int md = (l + r) >> 1;
            if ( match(i, md, 0, 1) ){
                l = md;
            } else r = md;
        }
        R[i] = l - i + 1;
    }
    for ( int i = n - 1; i >= 0; i-- ){
        int l = 0, r = i + 1;
        while ( l < r ){
            int md = (l + r) >> 1;
            if ( match(md, i, m - 1, -1) ){
                r = md;
            } else l = md + 1;
        }
        L[i] = i - r + 1;
    }
    vector <int> pf(n + 1);
    for ( int i = 0; i < n; i++ ){
        int l = i - (i > 0 ? L[i - 1] : 0), r = i - (m - R[i]);
        if ( l <= r ){
            pf[l]++, pf[r + 1]--;
        }
    }
    for ( int i = 1; i < n; i++ ){
        pf[i] += pf[i - 1];
    }
    set <int> st;
    for ( int i = 0; i < n; i++ ){
        if ( pf[i] > 0 ){
            st.insert(i);
        }
    }
    int x = 0, cnt = 0;
    while ( x < n ){
        auto it = st.lower_bound(x + 1);
        if ( it == st.begin() || *prev(it) + m - 1 < x ){
            return -1;
        } cnt++;
        x = *prev(it) + m;
    }
    return cnt;
}

# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 436 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Incorrect 1 ms 348 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 436 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Incorrect 1 ms 348 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 436 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Incorrect 1 ms 348 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 436 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Incorrect 1 ms 348 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 436 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Incorrect 1 ms 348 KB Output isn't correct
14 Halted 0 ms 0 KB -