This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "longesttrip.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> longest_trip(int N, int D) {
if (D > 1) {
deque<int> a;
if (are_connected({0}, {1})) {
a = {0, 1};
if (are_connected({0}, {2})) {
a.push_front(2);
} else {
a.push_back(2);
}
} else {
a = {0, 2, 1};
}
for (int i = 3; i < N; i++) {
if (are_connected({a.front()}, {i})) {
a.push_front(i);
} else {
a.push_back(i);
}
}
return vector(a.begin(), a.end());
}
set<pair<int, int>> s;
vector<int> a{0}, b{1};
for (int i = 2; i < N; i++) {
if (s.count(minmax(a.back(), b.back()))) {
if (are_connected({i}, {a.back()})) {
a.push_back(i);
} else {
s.insert(minmax(i, a.back()));
b.push_back(i);
}
} else if (are_connected({i}, {a.back()})) {
a.push_back(i);
} else if (are_connected({i}, {b.back()})) {
s.insert(minmax(i, a.back()));
b.push_back(i);
} else {
s.insert(minmax(i, a.back()));
s.insert(minmax(i, b.back()));
a.insert(a.end(), b.rbegin(), b.rend());
b = {i};
}
}
if (!are_connected(a, b)) {
return a.size() > b.size() ? a : b;
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
if (are_connected({a.back()}, {b.front()})) {
a.insert(a.end(), b.begin(), b.end());
return a;
}
reverse(b.begin(), b.end());
}
reverse(a.begin(), a.end());
}
int i, lo, hi;
lo = 0, hi = a.size() - 1;
while (lo < hi) {
int mi = (lo + hi) / 2;
are_connected(vector(a.begin(), a.begin() + mi + 1), b) ? hi = mi : lo = mi + 1;
}
i = lo, lo = 0, hi = b.size() - 1;
while (lo < hi) {
int mi = (lo + hi) / 2;
are_connected(vector(b.begin(), b.begin() + mi + 1), {a[i]}) ? hi = mi : lo = mi + 1;
}
vector<int> ans;
ans.insert(ans.end(), a.begin() + i + 1, a.end());
ans.insert(ans.end(), a.begin(), a.begin() + i + 1);
ans.insert(ans.end(), b.begin() + lo, b.end());
ans.insert(ans.end(), b.begin(), b.begin() + lo);
return ans;
}
# | 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... |