#include <iostream> #include <vector> using namespace std; const int najwieksza_moneta = 201718; const int rozm = najwieksza_moneta + 30; //30 to wiecej niz log2 z nmiliona; const int wartownik = 1; int main() { ios_base::sync_with_stdio( false ); int ile_monet; cin >> ile_monet; vector< int > skarbonka( rozm ); for( int i = 0; i < ile_monet; ++i ) { int moneta; cin >> moneta; skarbonka[moneta] += 1; } int wynik = 0; for( int moneta = 0; moneta < rozm - wartownik; ++moneta ) { int ile = skarbonka[moneta]; if( ile > 0 ) { wynik = moneta; } int podwojone = ile / 2; skarbonka[moneta+1] += podwojone; } cout << wynik << endl; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <iostream> #include <vector> using namespace std; const int najwieksza_moneta = 201718; const int rozm = najwieksza_moneta + 30; //30 to wiecej niz log2 z nmiliona; const int wartownik = 1; int main() { ios_base::sync_with_stdio( false ); int ile_monet; cin >> ile_monet; vector< int > skarbonka( rozm ); for( int i = 0; i < ile_monet; ++i ) { int moneta; cin >> moneta; skarbonka[moneta] += 1; } int wynik = 0; for( int moneta = 0; moneta < rozm - wartownik; ++moneta ) { int ile = skarbonka[moneta]; if( ile > 0 ) { wynik = moneta; } int podwojone = ile / 2; skarbonka[moneta+1] += podwojone; } cout << wynik << endl; } |