제출 #1059728

#제출 시각아이디문제언어결과실행 시간메모리
1059728tolbi가장 긴 여행 (IOI23_longesttrip)C++17
85 / 100
16 ms600 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); } mt19937 ayahya(chrono::high_resolution_clock().now().time_since_epoch().count()); int get(int l, int r){ return l+(ayahya()%(r-l+1)); } template<typename T> void shuffle_arr(vector<T> &arr){ for (int i = 0; i < arr.size()-1; i++){ swap(arr[i],arr[get(i,arr.size()-1)]); } } 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); } shuffle_arr(arr); 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:111:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  111 |     for (int i = 0; i < arr[0].size(); i++){
      |                     ~~^~~~~~~~~~~~~~~
longesttrip.cpp:114:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  114 |     for (int i = 0; i < arr[1].size(); i++){
      |                     ~~^~~~~~~~~~~~~~~
longesttrip.cpp: In instantiation of 'void shuffle_arr(std::vector<_Tp>&) [with T = std::vector<int>]':
longesttrip.cpp:27:20:   required from here
longesttrip.cpp:17:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |     for (int i = 0; i < arr.size()-1; 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...