Submission #842336

#TimeUsernameProblemLanguageResultExecution timeMemory
842336SHZhangLongest Trip (IOI23_longesttrip)C++17
85 / 100
13 ms940 KiB
#include "longesttrip.h" #include <cstdio> #include <vector> #include <algorithm> #include <utility> using namespace std; vector<int> longest_trip(int N, int D) { vector<int> c1, c2; c1.push_back(0); for (int i = 1; i < N; i++) { if (c2.empty()) { if (are_connected({c1.back()}, {i})) { c1.push_back(i); } else { c2.push_back(i); } } else { bool conn1 = are_connected({c1.back()}, {i}); bool conn2 = are_connected({c2.back()}, {i}); if (conn1 && conn2) { reverse(c2.begin(), c2.end()); c1.push_back(i); for (int i = 0; i < c2.size(); i++) { c1.push_back(c2[i]); } c2.clear(); } else if (conn1) { c1.push_back(i); } else { c2.push_back(i); } } } if (c2.empty()) { return c1; } if (!are_connected(c1, c2)) { if (c1.size() > c2.size()) { return c1; } else { return c2; } } if (c1.size() >= 2 && !are_connected({c1.front()}, {c1.back()})) { if (are_connected({c1.front()}, {c2.front()})) { reverse(c1.begin(), c1.end()); } for (int i = 0; i < c2.size(); i++) { c1.push_back(c2[i]); } return c1; } if (c2.size() >= 2 && !are_connected({c2.front()}, {c2.back()})) { if (are_connected({c1.back()}, {c2.back()})) { reverse(c2.begin(), c2.end()); } for (int i = 0; i < c2.size(); i++) { c1.push_back(c2[i]); } return c1; } int l1 = 1; int r1 = c1.size(); while (l1 < r1) { int mid = (l1 + r1) / 2; vector<int> newc1; for (int i = 0; i < mid; i++) newc1.push_back(c1[i]); if (are_connected(newc1, c2)) { r1 = mid; } else { l1 = mid + 1; } } vector<int> c1pref; for (int i = 0; i < l1; i++) c1pref.push_back(c1[i]); int l2 = 1; int r2 = c2.size(); while (l2 < r2) { int mid = (l2 + r2) / 2; vector<int> newc2; for (int i = 0; i < mid; i++) newc2.push_back(c2[i]); if (are_connected(c1pref, newc2)) { r2 = mid; } else { l2 = mid + 1; } } vector<int> ans; for (int i = l1; i < c1.size(); i++) ans.push_back(c1[i]); for (int i = 0; i < l1; i++) ans.push_back(c1[i]); for (int i = l2 - 1; i < c2.size(); i++) ans.push_back(c2[i]); for (int i = 0; i < l2 - 1; i++) ans.push_back(c2[i]); return ans; }

Compilation message (stderr)

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:27:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |                 for (int i = 0; i < c2.size(); i++) {
      |                                 ~~^~~~~~~~~~~
longesttrip.cpp:52:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |         for (int i = 0; i < c2.size(); i++) {
      |                         ~~^~~~~~~~~~~
longesttrip.cpp:61:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |         for (int i = 0; i < c2.size(); i++) {
      |                         ~~^~~~~~~~~~~
longesttrip.cpp:93:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |     for (int i = l1; i < c1.size(); i++) ans.push_back(c1[i]);
      |                      ~~^~~~~~~~~~~
longesttrip.cpp:95:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for (int i = l2 - 1; i < c2.size(); i++) ans.push_back(c2[i]);
      |                          ~~^~~~~~~~~~~
#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...