Submission #711661

#TimeUsernameProblemLanguageResultExecution timeMemory
711661william950615Slagalica (COCI19_slagalica2)C++14
10 / 70
219 ms10428 KiB
#include<bits/stdc++.h> using namespace std; #define F first #define S second #define MEM(x) memset(x, 0, sizeof(x)) #define ALL(x) begin(x), end(x) #define REP(i,n,...) for( int i = 0, ##__VA_ARGS__; i < n; ++i ) #define FOR(i,a,b,...) for( int i = (a), ##__VA_ARGS__; i <=(b); ++i) #define RFOR(i,a,b,...) for( int i = (a), ##__VA_ARGS__; i >=(b); --i) #define EB emplace_back #define EP emplace_back #define mkp make_pair #define SZ(x) int(x.size()) #ifdef DEBUG template<typename T> void _DO(T&&x) {cerr << x<< '\n';} template<typename A, typename ...B> void _DO(A&&a, B&&...b) { cerr <<a << ','; _DO(b...); } #define de(...) do{\ fprintf(stderr, "%s-%d (%s):", __func__, __LINE__, #__VA_ARGS__);\ _DO(__VA_ARGS__);\ }while(0); #else #define de(...) #endif typedef long long ll; typedef pair<int,int> pii; template<typename T> using V = vector<T>; inline void solve() { int N; cin >> N; set< pair<int,int> > st[ 2 ]; // val, jump to set< pair<int,int> > slf[ 2 ]; pii sta = mkp(-1, -1), ed =mkp(-1,-1); int stcnt, edcnt; stcnt = edcnt = 0; int ct[ 2 ] = {0, 0}; REP(i,N) { int x, val; cin >> x >> val; de( x, val ); if( x == 1 ) st[1] .insert( mkp( val, 0 ) ), ct[ 0 ]++; if( x == 2 ) st[1] .insert( mkp( val, 1 ) ), slf[ 1 ].insert( mkp( val, 1 )); if( x == 4 ) st[0] .insert( mkp( val, 1 ) ), ct[ 1 ]++; if( x == 3 ) st[0] .insert( mkp( val, 0 ) ), slf[ 0 ].insert( mkp(val, 1 ));; if( x == 5 ) stcnt++, sta=mkp( val, 0 ); if( x == 6 ) stcnt++, sta=mkp( val,1 ); if( x == 7 ) edcnt++, ed=mkp( val ,1 ); if( x == 8 ) edcnt++, ed=mkp( val, 0 ); } if( stcnt != 1 || edcnt != 1 ) { cout << -1 << '\n'; return; } V<int> ans; ans.push_back( sta.F ); int np = sta.S; while( !st[ np ].empty() ) { de( "start", np ); auto p = *st[ np ].begin(); de( p.F, p.S ); if( np != p.S ) { if( ct[ p.S ] == 1 && !slf[ np ].empty() ) { auto newp = *slf[ np ].begin(); ans.push_back( newp.F ); st[ np ].erase( newp ); slf[ np ].erase( newp ); continue; } else { ct[ p.S ]--; } } ans.push_back( p.F ); st[ np ].erase( st[ np ].begin() ); if( np == p.S ) slf[ np ].erase( p ); np = p.S; } if( np != ed.S ) { cout << -1 << '\n'; return; } ans.push_back( ed.F ); for( auto &i : ans ) { cout << i << ' '; } cout << '\n';; } int main () { int T = 1; #ifdef Local cin >> T; #endif while(T--) solve(); }
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...