Submission #1077359

#TimeUsernameProblemLanguageResultExecution timeMemory
1077359GrindMachineFun Tour (APIO20_fun)C++17
0 / 100
1 ms600 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL) #define pb push_back #define endl '\n' #define conts continue #define sz(a) (int)a.size() #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define ff first #define ss second #define rep(i,n) for(int i = 0; i < n; ++i) #define rep1(i,n) for(int i = 1; i <= n; ++i) #define rev(i,s,e) for(int i = s; i >= e; --i) #define trav(i,a) for(auto &i : a) template<typename T> void amin(T &x, T y){ x = min(x,y); } template<typename T> void amax(T &x, T y){ x = max(x,y); } template<typename A,typename B> string to_string(pair<A,B> p); string to_string(const string &s){ return "'"+s+"'"; } string to_string(const char* s){ return to_string((string)s); } string to_string(bool b){ return b?"true":"false"; } template<typename A> string to_string(A v){ string res = "{"; trav(x,v){ res += to_string(x)+","; } if(res.back() == ',') res.pop_back(); res += "}"; return res; } template<typename A,typename B> string to_string(pair<A,B> p){ return "("+to_string(p.ff)+","+to_string(p.ss)+")"; } #define debug(x) cout << "[" << #x << "]: "; cout << to_string(x) << endl const int MOD = 1e9 + 7; const int N = 1e5 + 5; const int inf1 = 1e9 + 5; const ll inf2 = (ll)1e18 + 5; #include "fun.h" std::vector<int> createFunTour(int n, int q) { // int H = hoursRequired(0, N - 1); // int A = attractionsBehind(0, N - 1); // return std::vector<int>(N); map<pii,int> mp; auto dis = [&](int u, int v){ if(u == v) return 0; if(u > v) swap(u,v); pii px = {u,v}; if(mp.count(px)) return mp[px]; return mp[px] = hoursRequired(u,v); }; pii best = {-1,-1}; rep1(i,n-1){ pii px = {dis(0,i),i}; amax(best,px); } int s = best.ss; best = {-1,-1}; rep(i,n){ if(i == s) conts; pii px = {dis(s,i),i}; amax(best,px); } int t = best.ss; vector<pii> path; vector<bool> on_path(n); rep(i,n){ if(dis(s,i)+dis(i,t) == dis(s,t)){ path.pb({dis(s,i),i}); on_path[i] = 1; } } sort(all(path)); vector<int> below(n,-1); rep(i,n){ if(!on_path[i]){ int d = dis(s,i); below[path[d-1].ss] = i; } } deque<int> dq; rep(i,sz(path)) dq.pb(path[i].ss); int turn = 0; vector<int> ans; ans.pb(s); dq.pop_front(); while(sz(ans) < n){ int nxt = -1; if(!turn){ // currently left, look right int u = dq.back(); if(below[u] != -1){ nxt = below[u]; below[u] = -1; } else{ nxt = u; dq.pop_back(); } } else{ int u = dq.front(); if(below[u] != -1){ nxt = below[u]; below[u] = -1; } else{ nxt = u; dq.pop_front(); } } turn ^= 1; ans.pb(nxt); } return ans; // vector<bool> rem(n); // int curr = s; // vector<int> ans; // while(true){ // rem[curr] = 1; // ans.pb(curr); // if(sz(ans) == n) return ans; // best = {-1,-1}; // rep(i,n){ // if(rem[i]) conts; // pii px = {dis(curr,i),i}; // amax(best,px); // } // curr = best.ss; // } // assert(0); // return ans; }
#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...