제출 #1081878

#제출 시각아이디문제언어결과실행 시간메모리
1081878ArthuroWich가장 긴 여행 (IOI23_longesttrip)C++17
85 / 100
18 ms600 KiB
#include "longesttrip.h" #include<bits/stdc++.h> using namespace std; vector<int> longest_trip(int n, int d) { vector<int> a, b, ans, st; for (int i = 0; i < n; i++) { st.push_back(i); } random_device rd; mt19937 g(rd()); shuffle(st.begin(), st.end(), g); a = {st[0]}; b = {st[1]}; st.erase(st.begin()); st.erase(st.begin()); set<pair<int, int>> ch; for (int i : st) { if (ch.count({min(a.back(), b.back()), max(a.back(), b.back())})) { if (are_connected({a.back()}, {i})) { a.push_back(i); } else { b.push_back(i); ch.insert({min(a.back(), b.back()), max(a.back(), b.back())}); } continue; } if (are_connected({a.back(), b.back()}, {i})) { if (are_connected({a.back()}, {i})) { a.push_back(i); } else { b.push_back(i); ch.insert({min(a.back(), b.back()), max(a.back(), b.back())}); } } else { for (int j = b.size()-1; j >= 0; j--) { a.push_back(b[j]); } b = {i}; } } int co = 2; if (are_connected(a, b)) { vector<int> ch1 = {a.front(), a.back()}, ch2 = {b.front(), b.back()}; sort(ch1.begin(), ch1.end()); ch1.erase(unique(ch1.begin(), ch1.end()), ch1.end()); sort(ch2.begin(), ch2.end()); ch2.erase(unique(ch2.begin(), ch2.end()), ch2.end()); if (!are_connected(ch1, ch2)) { // both become cycles that are connected via some edge? int l = 0, r = a.size()-1, e1, e2; while(l < r) { co++; int m = (l+r)/2; vector<int> in; for (int i = 0; i <= m; i++) { in.push_back(a[i]); } if (are_connected(in, b)) { r = m; } else { l = m+1; } } e1 = a[l]; l = 0, r = b.size()-1; while(l < r) { co++; int m = (l+r)/2; vector<int> in; for (int i = 0; i <= m; i++) { in.push_back(b[i]); } if (are_connected({e1}, in)) { r = m; } else { l = m+1; } } e2 = b[l]; vector<int> ans; for (int i = find(a.begin(), a.end(), e1) - a.begin()+1; i < a.size(); i++) { ans.push_back(a[i]); } for (int i = 0; i <= find(a.begin(), a.end(), e1) - a.begin(); i++) { ans.push_back(a[i]); } for (int i = find(b.begin(), b.end(), e2) - b.begin(); i < b.size(); i++) { ans.push_back(b[i]); } for (int i = 0; i < find(b.begin(), b.end(), e2) - b.begin(); i++) { ans.push_back(b[i]); } a = ans; b.clear(); } else if (are_connected({a.front()}, {b.front()})) { reverse(a.begin(), a.end()); for (int j = 0; j < b.size(); j++) { a.push_back(b[j]); } reverse(a.begin(), a.end()); b.clear(); } else if (are_connected({a.back()}, {b.front()})) { for (int j = 0; j < b.size(); j++) { a.push_back(b[j]); } b.clear(); } else if (are_connected({a.front()}, {b.back()})) { reverse(a.begin(), a.end()); for (int j = b.size()-1; j >= 0; j--) { a.push_back(b[j]); } reverse(a.begin(), a.end()); b.clear(); } else { for (int j = b.size()-1; j >= 0; j--) { a.push_back(b[j]); } b.clear(); } } if (a.size() >= b.size()) { ans = a; } else { ans = b; } return ans; }

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

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:81:72: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |             for (int i = find(a.begin(), a.end(), e1) - a.begin()+1; i < a.size(); i++) {
      |                                                                      ~~^~~~~~~~~~
longesttrip.cpp:87:70: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |             for (int i = find(b.begin(), b.end(), e2) - b.begin(); i < b.size(); i++) {
      |                                                                    ~~^~~~~~~~~~
longesttrip.cpp:97:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |             for (int j = 0; j < b.size(); j++) {
      |                             ~~^~~~~~~~~~
longesttrip.cpp:103:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |             for (int j = 0; j < b.size(); j++) {
      |                             ~~^~~~~~~~~~
#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...