Submission #1068955

#TimeUsernameProblemLanguageResultExecution timeMemory
1068955MalixLongest Trip (IOI23_longesttrip)C++17
40 / 100
17 ms600 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> tii; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair #define LSOne(s) ((s)&(-s)) ll INF=1e18+10; int inf=1e9+10; ll M=1e9+7; int solve(int bk,int p,int n){ vi a,b,x; x.PB(bk); REP(i,p,n){ a.clear(); a.PB(x.back()); b.clear(); b.PB(i); if(are_connected(a,b))x.PB(i); else return i; } return n; } std::vector<int> longest_trip(int n, int d) { if(d==3){ vi ans; REP(i,0,n)ans.PB(i); return ans; } if(d==2){ deque<int> dq; vi a,b; a.PB(0);b.PB(1); if(are_connected(a,b)){ dq.PB(0); dq.PB(1); b.pop_back();b.PB(2); if(are_connected(a,b))dq.push_front(2); else dq.push_back(2); } else{ dq.PB(0); dq.PB(2); dq.PB(1); } REP(i,3,n){ a.clear();b.clear(); a.PB(dq.back());b.PB(i); if(are_connected(a,b))dq.push_back(i); else dq.push_front(i); } vi ans; REP(i,0,n){ ans.PB(dq.front()); dq.pop_front(); } return ans; } vi ans; vi a,b,x,y; x.PB(0); int tm=solve(0,1,n); REP(i,1,tm)x.PB(i); if(tm!=n)y.PB(tm); if(y.empty())return x; int pos=tm+1; while(pos<n){ a.clear();b.clear(); a.PB(x.back());b.PB(pos); bool f1=are_connected(a,b); a.clear();b.clear(); a.PB(y.back());b.PB(pos); bool f2=are_connected(a,b); if(f1&&f2){ x.PB(pos); reverse(y.begin(),y.end()); for(auto u:y)x.PB(u); y.clear(); int tmp=solve(x.back(),pos+1,n); REP(i,pos+1,tmp)x.PB(i); if(tmp==n)return x; y.PB(tmp); pos=tmp+1; } else if(f1){ x.PB(pos); pos++; } else if(f2){ y.PB(pos); pos++; } else{ reverse(y.begin(),y.end()); for(auto u:y)x.PB(u); y.clear(); int tmp=solve(x.back(),pos,n); REP(i,pos,tmp)x.PB(i); if(tmp==n)return x; y.PB(tmp); pos=tmp+1; } } if(x.size()>=y.size())return x; else return y; 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...