Submission #42384

#TimeUsernameProblemLanguageResultExecution timeMemory
42384wasylPoklon (COCI17_poklon7)C++11
108 / 120
1086 ms99952 KiB
#include <iostream> #include <vector> #include <algorithm> #define d(...) __VA_ARGS__ #define EB(...) emplace_back(__VA_ARGS__) #define ALL(x) (x).begin(), (x).end() using namespace std; typedef long long ll; typedef unsigned long long ull; template< typename t > using V = vector< t >; struct BinNum { string n; int ile_zer = 0; BinNum( ll v ) { while ( v > 0 ) { n += string( 1, ( v % 2 ) + '0' ); v /= 2; } reverse( n.begin(), n.end() ); } BinNum() : n( string() ) {} BinNum( const BinNum& a ) { n = a.n; ile_zer = a.ile_zer; } inline bool operator< ( BinNum&& a ) { if ( a.n.size() + a.ile_zer == (*this).n.size() + (*this).ile_zer ) { if ( (*this).n.size() < a.n.size() ) { (*this).ile_zer -= a.n.size() - (*this).n.size(); (*this).n.resize( a.n.size(), '0' ); } if ( a.n.size() < (*this).n.size() ) { a.ile_zer -= (*this).n.size() - a.n.size(); a.n.resize( (*this).n.size(), '0' ); } for ( int i = 0; i < a.n.size(); ++i ) if ( a.n[i] != (*this).n[i] ) return (*this).n[i] < a.n[i]; return false; } return (*this).n.size() + (*this).ile_zer < a.n.size() + a.ile_zer; } inline bool operator< ( BinNum& a ) { if ( a.n.size() + a.ile_zer == (*this).n.size() + (*this).ile_zer ) { if ( (*this).n.size() < a.n.size() ) { (*this).ile_zer -= a.n.size() - (*this).n.size(); (*this).n.resize( a.n.size(), '0' ); } if ( a.n.size() < (*this).n.size() ) { a.ile_zer -= (*this).n.size() - a.n.size(); a.n.resize( (*this).n.size(), '0' ); } for ( int i = 0; i < a.n.size(); ++i ) if ( a.n[i] != (*this).n[i] ) return (*this).n[i] < a.n[i]; return false; } return (*this).n.size() + (*this).ile_zer < a.n.size() + a.ile_zer; } inline void operator <<= ( int poz ) { (*this).ile_zer += poz; } }; inline ostream& operator<< ( ostream& s, const BinNum& a ) { return s << a.n << string( a.ile_zer, '0' ); } struct Node { int l = -1, p = -1; BinNum sum; }; int n; V< Node > graf; void dfs ( int v ) { for ( int s : { graf[v].l, graf[v].p } ) if ( s != -1 ) { dfs( s ); if ( graf[v].sum < graf[s].sum ) graf[v].sum = graf[s].sum; } graf[v].sum <<= 1; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; graf.resize( n + 1 ); for ( int i = 1; i <= n; ++i ) { int p, p2; cin >> p >> p2; if ( p < 0 ) { if ( graf[i].sum < BinNum( -p ) ) graf[i].sum = BinNum( -p ); } else graf[i].l = p; if ( p2 < 0 ) { if ( graf[i].sum < BinNum( -p2 ) ) graf[i].sum = BinNum( -p2 ); } else graf[i].p = p2; } dfs( 1 ); cout << graf[1].sum << '\n'; }

Compilation message (stderr)

poklon.cpp: In member function 'bool BinNum::operator<(BinNum&&)':
poklon.cpp:46:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for ( int i = 0; i < a.n.size(); ++i )
                       ^
poklon.cpp: In member function 'bool BinNum::operator<(BinNum&)':
poklon.cpp:68:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for ( int i = 0; i < a.n.size(); ++i )
                       ^
#Verdict Execution timeMemoryGrader output
Fetching results...