Submission #1008327

# Submission time Handle Problem Language Result Execution time Memory
1008327 2024-06-26T09:22:56 Z giorgi123glm Collecting Stamps 3 (JOI20_ho_t3) C++17
0 / 100
1 ms 348 KB
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
#include <cstdint>
#include <queue>
using namespace std;

int main () {
    int n = 0, l = 0;
    cin >> n >> l;

    vector <int> X (n + 1);
    for (int i = 1; i <= n; i++)
        cin >> X[i];
    
    vector <int> T (n + 1);
    for (int i = 1; i <= n; i++)
        cin >> T[i];

    vector <int> prefX (n + 2);
    prefX[1] = 0;
    for (int i = 2; i <= n + 1; i++) {
        if (i <= n)
            prefX[i] = prefX[i - 1] + (X[i] - X[i - 1]);
        else
            prefX[i] = prefX[i - 1] + ((l - X[n]) + X[1]);
    }

    // Testing some stuff
    // cout << prefX[4] - prefX[3] << '\n';
    // for (int i = 1; i <= n + 1; i++) {
    //     cout << 2 << ' ' << (i - 1 % n) + 1 << " | " << prefX[i] - prefX[2] << '\n';
    // }

    // u could just do this...
    //                    time     point  vector index
    priority_queue <pair <int, pair <int, int> > > s;
    vector <vector <bool> > v;
    vector <int> rem;
    rem.reserve (n * n);
    v.reserve (n * n);
    int free = 0;

    // template
    vector <bool> template1 (n + 1);
    for (int i = 1; i <= n; i++) {
        int mindist = min (
            prefX[i] + X[1],
            l - (prefX[i] + X[1])
        );

        if (mindist > T[i])
            continue;

        s.push ({
            mindist,
            {
                i,
                free++
            }
        });

        // cout << i << ' ' << mindist << '\n';

        template1[i] = 1;
        v.push_back (template1);
        rem.push_back (1);
        template1[i] = 0;
    }

    // deallocate template1
    // vector <bool> ().swap (template1);

    int ans = 0;
    // dijksta
    while (!s.empty()) {
        int p = s.top().second.first;
        int cont = s.top().second.second;
        int time = s.top().first;
        s.pop ();

        ans = max (ans, rem[cont]);

        for (int e = 1; e <= n; e++)
            if (e != p) {
                int mindist = min (
                    prefX[e] + X[1],
                    l - (prefX[e] + X[1])
                );

                if (mindist + time <= T[e] && v[cont][e] == 0) {
                    s.push ({
                        mindist + time,
                        {
                            e,
                            free++
                        }
                    });

                    v[cont][e] = 1;
                    v.push_back (v[cont]);
                    rem.push_back (rem[cont] + 1);
                    v[cont][e] = 0;
                }
            }

        // deallocate
        // vector <bool> ().swap (v[cont]);
    }

    cout << ans << '\n';
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -