Submission #1247270

#TimeUsernameProblemLanguageResultExecution timeMemory
124727012baaterLongest Trip (IOI23_longesttrip)C++20
5 / 100
4 ms416 KiB
#include "longesttrip.h" #include <vector> #include <stack> #include <iostream> #include <deque> #include <queue> using namespace std; vector<int> longest_trip(int N, int D) { deque<int> flink; deque<int> slink; flink.push_back(0); queue<int> to_link; for (int i = 1; i < N; i++) { to_link.push(i); } for (; !to_link.empty(); to_link.pop()) { bool add_next = are_connected({flink.back()}, {to_link.front()}); if (add_next) { flink.push_back(to_link.front()); } else { slink.push_back(to_link.front()); to_link.pop(); break; } } for (; !to_link.empty(); to_link.pop()) { bool in_flink = are_connected({flink.back()}, {to_link.front()}); if (in_flink) { flink.push_back(to_link.front()); if (are_connected({flink.back()}, {slink.back()})) { while (!slink.empty()) { flink.push_back(slink.back()); slink.pop_back(); } } } else { slink.push_back(to_link.front()); } } vector<int> fLink; for (; !flink.empty(); flink.pop_back()) { fLink.push_back(flink.back()); } vector<int> sLink; for (; !slink.empty(); slink.pop_back()) { sLink.push_back(slink.back()); } if (sLink.size() < 1) { return fLink; } else if (fLink.size() < 1) { return sLink; } // cout << "///log\n"; // for (int x : fLink) { // cout << x << " "; // } // cout << endl; // // for (int x : sLink) { // cout << x << " "; // } // cout << endl; bool same_component = are_connected(fLink, sLink); // cout << "///log\n"; if (!same_component) { if (fLink.size() > sLink.size()) { return fLink; } else { return sLink; } } int l = 0, r = fLink.size() - 1; // cout << "///log\n"; while (l < r) { int mid = (l+r)/2; vector<int> testV; for (int i = l; i <= mid; i++) { testV.push_back(fLink[i]); } if (are_connected(testV, sLink)) { r = mid; } else { l = mid+1; } } // cout << "///log\n"; int connectionPoint = fLink[r]; int connectionIndex = r; vector<int> ans; for (int i = 0; i < fLink.size(); i++) { if (i == connectionIndex) continue; ans.push_back(fLink[i]); } ans.push_back(connectionPoint); for (int i = 0; i < sLink.size(); i++) { ans.push_back(sLink[i]); } // cout << "///log\n"; // for (auto x : ans) { // cout << x << " "; // } // cout << "\n////logend\n"; return ans; // l = 0, r = sLink.size() - 1; // // while (l < r) { // int mid = (l+r)/2; // vector<int> testV; // for (int i = l; i <= mid; i++) { // testV.push_back(sLink[i]); // } // if (are_connected({connectionPoint}, sLink)) { // r = mid; // } else { // l = mid+1; // } // } // // int cP2 = sLink[r]; // if (are_connected({cP2}, {fLink.front()})) { // for (int i = 0; i < fLink.size(); i++) { // // } // } // // return ans; }
#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...