Submission #899617

#TimeUsernameProblemLanguageResultExecution timeMemory
899617SzilLongest Trip (IOI23_longesttrip)C++17
15 / 100
62 ms956 KiB
#include <bits/stdc++.h> #include "longesttrip.h" using namespace std; // bool are_connected(int[] A, int[] B); vector<int> solve3(int N) { vector<int> ans(N); iota(ans.begin(), ans.end(), 0); return ans; } vector<int> solve2(int N) { queue<int> q; vector<int> ans; for (int i = 0; i < N; i++) { q.push(i); } int extra = -1; while (!q.empty()) { int u = q.front(); q.pop(); ans.emplace_back(u); if (q.empty()) continue; int v = q.front(); if (!are_connected({u}, {v})) { q.pop(); if (q.empty()) { extra = v; } else { q.push(v); } } } vector<int> res; for (int i = 0; i < ans.size(); i++) { if (i == 0 && extra != -1) res.emplace_back(extra); res.emplace_back(ans[i]); } for (int i = 1; i < res.size(); i++) { assert(are_connected({res[i-1]}, {res[i]})); } assert(res.size() == N); return res; } vector<int> merge_vectors(const vector<int> &a, const vector<int> &b) { vector<int> res; for (int i : a) res.emplace_back(i); for (int i : b) res.emplace_back(i); return res; } vector<int> get_interval(const vector<int> &a, int l, int r) { vector<int> res; for (int i = l; i <= r; i++) { res.emplace_back(a[i]); } return res; } vector<int> add_to_component(vector<int> comp, int u) { if (comp.empty()) return {u}; if (comp.size() == 1) return {comp.front(), u}; int lo = 1, hi = comp.size() - 1; while (lo < hi) { int mid = (lo + hi) / 2; if (are_connected(get_interval(comp, lo, mid), {u})) { hi = mid; } else { lo = mid + 1; } } vector<int> res1 = {u, comp[lo]}; auto res2 = merge_vectors(res1, get_interval(comp, lo+1, comp.size()-1)); auto res3 = merge_vectors(res2, get_interval(comp, 0, lo-1)); return res3; } vector<int> solve1(int N) { vector<int> a = {0}, b; for (int i = 1; i < N; i++) { if (are_connected(a, {i})) { a = add_to_component(a, i); } else { b = add_to_component(b, i); } } if (a.size() > b.size()) return a; else return b; } vector<int> longest_trip(int N, int D) { if (D == 3) return solve3(N); if (D == 2) return solve2(N); if (D == 1) return solve1(N); }

Compilation message (stderr)

longesttrip.cpp: In function 'std::vector<int> solve2(int)':
longesttrip.cpp:38:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     for (int i = 0; i < ans.size(); i++) {
      |                     ~~^~~~~~~~~~~~
longesttrip.cpp:42:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |     for (int i = 1; i < res.size(); i++) {
      |                     ~~^~~~~~~~~~~~
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from longesttrip.cpp:1:
longesttrip.cpp:45:23: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   45 |     assert(res.size() == N);
      |            ~~~~~~~~~~~^~~~
longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:104:1: warning: control reaches end of non-void function [-Wreturn-type]
  104 | }
      | ^
#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...