제출 #858269

#제출 시각아이디문제언어결과실행 시간메모리
858269Danilo21가장 긴 여행 (IOI23_longesttrip)C++17
40 / 100
15 ms1380 KiB
#include <bits/stdc++.h> #include "longesttrip.h" #define ll long long #define ld long double #define pb push_back #define fi first #define se second #define en '\n' #define sp ' ' #define tb '\t' #define ri(n) int n; cin >> n #define rl(n) ll n; cin >> n #define rs(s) string s; cin >> s #define rc(c) char c; cin >> c #define rv(v) for (auto &x : v) cin >> x #define pven(v) for (auto x : v) cout << x << en #define pv(v) for (auto x : v) cout << x << sp; cout << en #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define yes cout << "YES" << en #define no cout << "NO" << en #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) #define ssort(a, b) if (a < b) swap(a, b) #define bitcnt(a) (__builtin_popcountll(a)) #define bithigh(a) (63-__builtin_clzll(a)) #define lg bithigh #define highpow(a) (1LL << (ll)lg(a)) using namespace std; const ll LINF = 2e18; const int mxN = 300, INF = 2e9; vector<int> Connect(const vector<int>& a, const vector<int>& b){ vector<int> v; for (int s : a) v.pb(s); reverse(all(v)); for (int s : b) v.pb(s); return v; } vector<int> D1(int N){ vector<vector<int> > trips; for (int i = 0; i < N; i++) trips.pb({i}); while (trips.size() > 2){ array<vector<int>, 3> a; for (int i = 0; i < 3; i++){ a[i] = trips.back(); trips.pop_back(); } for (int i = 0; i < 3; i++){ bool f = 0; for (int j = i+1; j < 3; j++){ if (are_connected({a[i][0]}, {a[j][0]})){ trips.pb(Connect(a[i], a[j])); trips.pb(a[3-i-j]); f = 1; break; } } if (f) break; } } array<vector<int>, 2> a = {trips[0], trips[0]}; array<vector<int>, 2> b = {trips[1], trips[1]}; reverse(all(a[1])); reverse(all(b[1])); for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) if (are_connected({a[i][0]}, {b[j][0]})) return Connect(a[i], b[j]); return trips[0].size() > trips[1].size() ? trips[0] : trips[1]; } vector<int> longest_trip(int N, int D){ return D1(N); if (D == 1) return D1(N); vector<int> trip = {0}; for (int i = 1; i < N; i++){ bool f = are_connected({trip.back()}, {i}); if (f){ trip.pb(i); continue; } if (i < N-1){ trip.pb(i+1); trip.pb(i); i++; continue; } reverse(all(trip)); trip.pb(i); } return trip; }
#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...