Submission #941840

#TimeUsernameProblemLanguageResultExecution timeMemory
941840benjaminkleynLongest Trip (IOI23_longesttrip)C++17
40 / 100
12 ms852 KiB
#include <bits/stdc++.h>
#include "longesttrip.h"
using namespace std;

vector<int> longest_trip(int N, int D)
{
    if (D == 3)
    {
        vector<int> res(N);
        iota(res.begin(), res.end(), 0);
        return res;
    }

    if (D == 2)
    {
        vector<int> res;
        int cur;
        if (are_connected({0}, {1}))
            res = {0, 1}, cur = 2;
        else
            res = {0, 2, 1}, cur = 3;

        for (int i = cur; i < N; i++)
        {
            if (!are_connected({res.back()}, {i}))
                reverse(res.begin(), res.end());
            res.push_back(i);
        }

        return res;
    }

    vector<int> A = {0}, B = {1};
    for (int i = 2; i < N; i++)
    {
        if (are_connected({i}, {A.back(), B.back()}))
        {
            if (are_connected({i}, {A.back()}))
                A.push_back(i);
            else
                B.push_back(i);
        }
        else
        {
            reverse(B.begin(), B.end());
            for (int x : B)
                A.push_back(x);
            B = {i};
        }
    }
    if (A.size() > B.size())
        return A;
    return B;
}
#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...