Submission #841804

#TimeUsernameProblemLanguageResultExecution timeMemory
841804emuyumiLongest Trip (IOI23_longesttrip)C++17
5 / 100
12 ms956 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; using ll = long long; vector<int> longest_trip(int N, int D) { int calls = 0; auto my_are_connected = [&](vector<int> a, vector<int> b) { calls ++; return are_connected(a, b); }; bool found = 0; vector<int> answer; using vi = vector<int>; auto halves = [&](vector<int> v) -> pair<vi, vi> { int m = v.size() / 2; return {{v.begin(), v.begin()+m}, {v.begin()+m, v.end()}}; }; auto locate = [&](vector<int> src, vector<int> dest) -> int { while (src.size() != 1) { auto [a, b] = halves(src); if (my_are_connected(a, dest)) src = a; else src = b; } return src[0]; }; vector<int> path = {0}; vector<int> left(N-1); vector<int> clique; iota(left.begin(), left.end(), 1); while (left.size()) { int v = path.back(); while (!left.empty()) { int nxt = left.back(); left.pop_back(); if (!my_are_connected({nxt}, {v})) { clique.push_back(nxt); } else { path.push_back(nxt); break; } } v = path.back(); if (!clique.empty()) { if (my_are_connected(clique, {v})) { int b = locate(clique, {v}); clique.erase(find(clique.begin(), clique.end(), b)); path.push_back(b); for (int x : clique) path.push_back(x); clique.clear(); continue; } } } if (!clique.empty()) { if (!my_are_connected(path, clique)) { if (path.size() > clique.size()) return path; else return clique; } int a = locate(path, clique); int b = locate(clique, {a}); vector<int> ans = clique; ans.erase(find(ans.begin(), ans.end(), b)); ans.push_back(b); int j = find(path.begin(), path.end(), a) - path.begin(); if (j == 0) { for (int x : path) { ans.push_back(x); } } else { for (int i = j; i >= 0; --i) { ans.push_back(path[i]); } for (int i = path.size()-1; i > j; --i) { ans.push_back(path[i]); } } } return path; }

Compilation message (stderr)

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:15:7: warning: unused variable 'found' [-Wunused-variable]
   15 |  bool found = 0;
      |       ^~~~~
#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...