이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |