#include "longesttrip.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
vector<int> longest_trip(int n, int D) {
if (D == 3) {
vector<int> v(n);
iota(v.begin(), v.end(), 0);
return v;
}
if (D == 2) {
deque<int> dq;
dq = {0};
set<int> s;
for (int i = 1; i < n; ++i) s.insert(i);
while (s.size() > 1) {
int x = *s.begin(); s.erase(x);
int y = *s.begin(); s.erase(y);
if (are_connected({dq.back()}, {x})) {
dq.pb(x);
s.insert(y);
}
else {
dq.pb(y);
s.insert(x);
}
}
int x = *s.begin();
if (are_connected({dq.back()}, {x}))
dq.pb(x);
else
dq.push_front(x);
vector<int> v(n);
for (int i = 0; i < n; ++i) v[i] = dq[i];
return v;
}
if (D == 1) {
vector<int> A = {0}, B;
for (int i = 1; i < n; ++i) {
bool a = are_connected({A.back()}, {i});
if (B.empty()) {
if (a)
A.pb(i);
else
B.pb(i);
}
else {
bool b = are_connected({B.back()}, {i});
if (a && b) {
A.pb(i);
reverse(B.begin(), B.end());
for (auto x : B) A.pb(x);
B.clear();
}
else if (a)
A.pb(i);
else
B.pb(i);
}
}
return A.size() > B.size() ? A : B;
}
return {};
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |