제출 #941907

#제출 시각아이디문제언어결과실행 시간메모리
941907benjaminkleyn가장 긴 여행 (IOI23_longesttrip)C++17
100 / 100
15 ms860 KiB
#include <bits/stdc++.h> #include "longesttrip.h" using namespace std; #define all(x) x.begin(), x.end() #define vi vector<int> #define C are_connected #define pb push_back #define bk back #define rev(x) reverse(all(x)) vi longest_trip(int N, int D) { if (D == 3) { vi r(N); iota(all(r), 0); return r; } if (D == 2) { vi r; int t; if (C({0}, {1})) r = {0, 1}, t = 2; else r = {0, 2, 1}, t = 3; for (int i = t; i < N; i++) { if (!C({r.bk()}, {i})) rev(r); r.pb(i); } return r; } vi A = {0}, B = {1}; for (int i = 2; i + 1 < N; i += 2) { if (C({i}, {i + 1})) { if (C({i}, {A.bk(), B.bk()})) { if (C({i}, {A.bk()})) { A.pb(i); A.pb(i + 1); } else { B.pb(i); B.pb(i + 1); } } else { rev(B); for (int x : B) A.pb(x); B = {i, i + 1}; } } else { if (C({A.bk()}, {i})) { A.pb(i); if (C({B.bk()}, {i + 1})) B.pb(i + 1); else { rev(B); for (int x : B) A.pb(x); B = {i + 1}; } } else { A.pb(i + 1); if (C({B.bk()}, {i})) B.pb(i); else { rev(B); for (int x : B) A.pb(x); B = {i}; } } } } if (N % 2) { if (C({N - 1}, {A.bk(), B.bk()})) { if (C({N - 1}, {A.bk()})) A.pb(N - 1); else B.pb(N - 1); } else { rev(B); for (int x : B) A.pb(x); B = {N - 1}; } } if (!C(A, B)) { if (A.size() > B.size()) return A; return B; } if (A.size() > 1 && !C({A[0]}, {A.bk()})) { if (C({A.bk()}, {B.bk()})) rev(A); for (int x : A) B.pb(x); return B; } if (B.size() > 1 && !C({B[0]}, {B.bk()})) { if (C({A.bk()}, {B.bk()})) rev(B); for (int x : B) A.pb(x); return A; } int a = 1, b = A.size(); while (a < b) { int m = (a + b) / 2; if (C(vi(A.begin(), A.begin() + m), B)) b = m; else a = m + 1; } int x = a - 1; a = 1, b = B.size(); while (a < b) { int m = (a + b) / 2; if (C(vi(B.begin(), B.begin() + m), {A[x]})) b = m; else a = m + 1; } int y = a - 1; vi r; for (int i = x + 1; i < A.size(); i++) r.pb(A[i]); for (int i = 0; i <= x; i++) r.pb(A[i]); for (int i = y; i < B.size(); i++) r.pb(B[i]); for (int i = 0; i < y; i++) r.pb(B[i]); return r; }

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

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