제출 #1247280

#제출 시각아이디문제언어결과실행 시간메모리
124728012baater가장 긴 여행 (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 (slink.empty()) continue; 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"; if (fLink.size() < sLink.size()) swap(sLink,fLink); // 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; } } int connectionPoint = fLink[r]; int connectionIndex = r; // cout << connectionPoint << "\n"; // vector<int> ans; // for (int i = 0; i < fLink.size(); i++) { // if (i == connectionIndex) continue; // ans.push_back(fLink[i]); // } // // ans.push_back(connectionPoint); // if (are_connected({connectionPoint}, {sLink.front()})) { // for (int i = 0; i < sLink.size(); i++) { // ans.push_back(sLink[i]); // } // } else { // for (int i = sLink.size()-1; i >= 0; 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}, testV)) { r = mid; } else { l = mid+1; } } int cP2 = sLink[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); ans.push_back(cP2); for (int i = 0; i < sLink.size(); i++) { if (sLink[i] == cP2) continue; ans.push_back(sLink[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...