제출 #1059725

#제출 시각아이디문제언어결과실행 시간메모리
1059725tolbi가장 긴 여행 (IOI23_longesttrip)C++17
85 / 100
17 ms604 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; //bool are_connected(std::vector<int> A, std::vector<int> B); bool sor(int x, int y){ std::vector<int> ilk; std::vector<int> iki; ilk.push_back(x); iki.push_back(y); return are_connected(ilk,iki); } std::vector<int> longest_trip(int N, int D) { vector<vector<int>> arr(N); for (int i = 0; i < N; i++){ arr[i].push_back(i); } while (arr.size()>2){ if (sor(arr[0].back(),arr[1][0])){ for (auto it : arr[1]){ arr[0].push_back(it); } swap(arr[1],arr.back()); arr.pop_back(); } else if (sor(arr[0].back(),arr[2][0])){ for (auto it : arr[2]){ arr[0].push_back(it); } swap(arr[2],arr.back()); arr.pop_back(); } else{ reverse(arr[1].begin(), arr[1].end()); for (auto it : arr[2]){ arr[1].push_back(it); } swap(arr[2],arr.back()); arr.pop_back(); } } if (!are_connected(arr[0],arr[1])){ if (arr[0].size()>arr[1].size()) return arr[0]; return arr[1]; } if (sor(arr[0].back(),arr[1][0])){ for (auto it : arr[1]){ arr[0].push_back(it); } return arr[0]; } else if (sor(arr[0].back(),arr[1].back())){ reverse(arr[1].begin(), arr[1].end()); for (auto it : arr[1]){ arr[0].push_back(it); } return arr[0]; } swap(arr[0],arr[1]); if (sor(arr[0].back(),arr[1][0])){ for (auto it : arr[1]){ arr[0].push_back(it); } return arr[0]; } else if (sor(arr[0].back(),arr[1].back())){ reverse(arr[1].begin(), arr[1].end()); for (auto it : arr[1]){ arr[0].push_back(it); } return arr[0]; } int l = 0, r = arr[0].size()-1; while (l<r){ int mid = l+(r-l)/2; vector<int> sahbatur; for (int i = 0; i <= mid; i++){ sahbatur.push_back(arr[0][i]); } if (are_connected(sahbatur,arr[1])){ r=mid; } else l=mid+1; } int bir = l; vector<int> longrunner(1,arr[0][bir]); l = 0, r = arr[1].size()-1; while (l<r){ int mid = l+(r-l)/2; vector<int> sahbatur; for (int i = 0; i <= mid; i++){ sahbatur.push_back(arr[1][i]); } if (are_connected(sahbatur,longrunner)){ r=mid; } else l=mid+1; } int iki = l; vector<int> ans; for (int i = 0; i < arr[0].size(); i++){ ans.push_back(arr[0][(bir+i+1)%arr[0].size()]); } for (int i = 0; i < arr[1].size(); i++){ ans.push_back(arr[1][(iki+i)%arr[1].size()]); } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:101:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |     for (int i = 0; i < arr[0].size(); i++){
      |                     ~~^~~~~~~~~~~~~~~
longesttrip.cpp:104:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |     for (int i = 0; i < arr[1].size(); 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...