제출 #850274

#제출 시각아이디문제언어결과실행 시간메모리
850274nvmdava가장 긴 여행 (IOI23_longesttrip)C++17
85 / 100
15 ms956 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; vector<int> rng(vector<int>& a, int l, int r) { vector<int> res; for(int i = l; i <= r; ++i) res.push_back(a[i]); return res; } std::vector<int> longest_trip(int N, int D) { if(D == 3) { vector<int> res(N); for(int i = 0; i < N; ++i) res[i] = i; return res; } if(D == 2) { vector<int> res = {0}; for(int i = 1; i < N; ++i) { if(are_connected({res.back()}, {i})) { res.push_back(i); continue; } if(i == 1) { res.push_back(i + 1); res.push_back(i); i++; continue; } res.insert(res.begin(), i); } return res; } vector<vector<int> > all; for(int i = 0; i < N; ++i) { all.push_back({i}); } bool la = 0; while(all.size() >= 3) { int sz = all.size(); if(la == 0) { if(are_connected({all[sz - 1].back()}, {all[sz - 2].back()})) { reverse(all[sz - 1].begin(), all[sz - 1].end()); for(auto x : all[sz - 1]) all[sz - 2].push_back(x); all.pop_back(); la = 0; continue; } la = 1; } if(are_connected({all[sz - 1].back()}, {all[sz - 3].back()})) { reverse(all[sz - 1].begin(), all[sz - 1].end()); for(auto x : all[sz - 1]) all[sz - 3].push_back(x); all.pop_back(); la = 0; continue; } reverse(all[sz - 2].begin(), all[sz - 2].end()); for(auto x : all[sz - 2]) all[sz - 3].push_back(x); swap(all[sz - 1], all[sz - 2]); all.pop_back(); la = 0; } if(are_connected({all[0].back()}, {all[1].back()})) { reverse(all[1].begin(), all[1].end()); for(auto x : all[1]) all[0].push_back(x); return all[0]; } if(are_connected({all[0].back()}, {all[1][0]})) { for(auto x : all[1]) all[0].push_back(x); return all[0]; } if(are_connected({all[0][0]}, {all[1][0]})) { reverse(all[0].begin(), all[0].end()); for(auto x : all[1]) all[0].push_back(x); return all[0]; } if(are_connected({all[0][0]}, {all[1].back()})) { reverse(all[0].begin(), all[0].end()); reverse(all[1].begin(), all[1].end()); for(auto x : all[1]) all[0].push_back(x); return all[0]; } int l0 = 0, r0 = (int)all[0].size() - 1; int l1 = 0, r1 = (int)all[1].size() - 1; // for(auto& x : all[0]) cout<<x<<' '; // cout<<'\n'; // for(auto& x : all[1]) cout<<x<<' '; // cout<<'\n'; if(are_connected(rng(all[0], l0, r0), rng(all[1], l1, r1)) == 0) { if(all[0].size() > all[1].size()) return all[0]; return all[1]; } while(l0 != r0 || l1 != r1) { if(l0 != r0) { int m = (l0 + r0) >> 1; if(are_connected(rng(all[0], l0, m), rng(all[1], l1, r1))) { r0 = m; } else { l0 = m + 1; } continue; } int m = (l1 + r1) >> 1; if(are_connected(rng(all[0], l0, r0), rng(all[1], l1, m))) { r1 = m; } else { l1 = m + 1; } } vector<int> res; for(int i = 1; i <= all[1].size(); ++i) { res.push_back(all[1][(i + l1) % all[1].size()]); } for(int i = 0; i < all[0].size(); ++i) { res.push_back(all[0][(i + l0) % all[0].size()]); } return res; }

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

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