Submission #980645

#TimeUsernameProblemLanguageResultExecution timeMemory
980645oleh1421Longest Trip (IOI23_longesttrip)C++17
15 / 100
13 ms856 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; bool connected(vector<int>A,vector<int>B){ if (A.empty() || B.empty()) return false; sort(A.begin(),A.end()); sort(B.begin(),B.end()); A.erase(unique(A.begin(),A.end()),A.end()); B.erase(unique(B.begin(),B.end()),B.end()); return are_connected(A,B); } std::vector<int> longest_trip(int N, int D) { vector<int>A={0},B; for (int i=1;i<N;i++){ if (connected({A.back()},{i})){ A.push_back(i); } else { if (B.empty() || connected({B.back()},{i})){ B.push_back(i); } else { reverse(B.begin(),B.end()); for (auto i:B) A.push_back(i); B={i}; } } } if (B.empty()) return A; if (!connected(A,B)){ if (A.size()>B.size()) return A; else return B; } if (connected({A[0],A.back()},{B[0],B.back()})){ if (connected({A[0]},{B[0],B.back()})){ if (connected({A[0]},{B[0]})){ reverse(B.begin(),B.end()); for (auto i:A){ B.push_back(i); } return B; } else { for (auto i:A){ B.push_back(i); } return B; } } else { if (connected({A.back()},{B[0]})){ for (auto i:B){ A.push_back(i); } return A; } else { reverse(B.begin(),B.end()); for (auto i:B){ A.push_back(i); } return A; } } } vector<int>rem,A0,B0; { int pos=0; for (int i=8;i>=0;i--){ pos+=(1<<i); if (pos>=A.size()){ pos-=(1<<i); continue; } vector<int>C; for (int j=0;j<pos;j++) C.push_back(A[j]); if (connected(C,B)){ pos-=(1<<i); } } rem=A; A={A[pos]}; swap(A,B); } A0=rem; { int pos=0; for (int i=8;i>=0;i--){ pos+=(1<<i); if (pos>=A.size()){ pos-=(1<<i); continue; } vector<int>C; for (int j=0;j<pos;j++) C.push_back(A[j]); if (connected(C,B)){ pos-=(1<<i); } } rem=A; A={A[pos]}; swap(A,B); } B0=rem; int posA=-1,posB=-1; for (int i=0;i<A.size();i++){ if (A0[i]==A[0]) posA=i; } for (int i=0;i<B.size();i++){ if (B0[i]==B[0]) posB=i; } vector<int>ans; for (int i=posA+1;i<A.size();i++){ ans.push_back(A0[i]); } for (int i=0;i<=posA;i++){ ans.push_back(A0[i]); } for (int i=posB;i<B.size();i++){ ans.push_back(B0[i]); } for (int i=0;i<posB;i++){ ans.push_back(B0[i]); } for (int i=1;i<ans.size();i++){ if (!connected({ans[i-1]},{ans[i]})) exit(1); } if (ans.size()!=N) exit(1); set<int>st; for (auto i:ans){ st.insert(i); } if (st.size()<ans.size()) exit(1); return ans; }

Compilation message (stderr)

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:68:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |             if (pos>=A.size()){
      |                 ~~~^~~~~~~~~~
longesttrip.cpp:87:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |             if (pos>=A.size()){
      |                 ~~~^~~~~~~~~~
longesttrip.cpp:105:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |     for (int i=0;i<A.size();i++){
      |                  ~^~~~~~~~~
longesttrip.cpp:108:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |     for (int i=0;i<B.size();i++){
      |                  ~^~~~~~~~~
longesttrip.cpp:112:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  112 |     for (int i=posA+1;i<A.size();i++){
      |                       ~^~~~~~~~~
longesttrip.cpp:118:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  118 |     for (int i=posB;i<B.size();i++){
      |                     ~^~~~~~~~~
longesttrip.cpp:124:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  124 |     for (int i=1;i<ans.size();i++){
      |                  ~^~~~~~~~~~~
longesttrip.cpp:127:19: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  127 |     if (ans.size()!=N) exit(1);
      |         ~~~~~~~~~~^~~
#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...