Submission #1203963

#TimeUsernameProblemLanguageResultExecution timeMemory
1203963Zbyszek99Longest Trip (IOI23_longesttrip)C++20
40 / 100
6 ms424 KiB
#include "longesttrip.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define ld long double #define ull unsigned long long #define ff first #define ss second #define pii pair<int,int> #define pll pair<long long, long long> #define vi vector<int> #define vl vector<long long> #define pb push_back #define rep(i, b) for(int i = 0; i < (b); ++i) #define rep2(i,a,b) for(int i = a; i <= (b); ++i) #define rep3(i,a,b,c) for(int i = a; i <= (b); i+=c) #define count_bits(x) __builtin_popcountll((x)) #define all(x) (x).begin(),(x).end() #define siz(x) (int)(x).size() #define forall(it,x) for(auto& it:(x)) using namespace __gnu_pbds; using namespace std; typedef tree<int, null_type, less<int>, rb_tree_tag,tree_order_statistics_node_update> ordered_set; mt19937 mt;void random_start(){mt.seed(chrono::time_point_cast<chrono::milliseconds>(chrono::high_resolution_clock::now()).time_since_epoch().count());} ll los(ll a, ll b) {return a + (mt() % (b-a+1));} const int INF = 1e9+50; const ll INF_L = 1e18+40; const ll MOD = 1e9+7; vi longest_trip(int n, int D) { random_start(); vi verts; rep(i,n) verts.pb(i); shuffle(all(verts),mt); vi t1 = {verts[0]}; vi t2 = {verts[1]}; bool is_nc = 0; rep2(i,2,n-1) { int v = verts[i]; if(los(0,1) == 0) swap(t1,t2); if(are_connected({v},{t1.back()})) { t1.pb(v); is_nc = 0; } else { if(is_nc) { is_nc = 1; t2.pb(v); } else { if(are_connected({v},{t2.back()})) { is_nc = 1; t2.pb(v); } else { for(int j = siz(t2)-1; j >= 0; j--) { t1.pb(t2[j]); } t2 = {v}; is_nc = 0; } } } } vi ends1; vi ends2; if(siz(t1) == 1) ends1 = {t1[0]}; else ends1 = {t1[0],t1.back()}; if(siz(t2) == 1) ends2 = {t2[0]}; else ends2 = {t2[0],t2.back()}; if(are_connected(ends1,ends2)) { if(are_connected(ends1,{ends2[0]})) { if(are_connected({ends1[0]},{ends2[0]})) { reverse(all(t1)); forall(it,t2) t1.pb(it); return t1; } else { forall(it,t2) t1.pb(it); return t1; } } else { reverse(all(t2)); if(are_connected({ends1[0]},{ends2.back()})) { reverse(all(t1)); forall(it,t2) t1.pb(it); return t1; } else { forall(it,t2) t1.pb(it); return t1; } } } if(siz(t1) > siz(t2)) return t1; return t2; }
#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...