Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
  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
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*

Wej�cie

Pierwszy wiersz wej�cia zawiera jedn� liczb� ca�kowit� n (1 ? n ? 1000000) oznaczaj�c� liczb� monet w�o�onych przez Bajtka do skarbonki. 
Nast�pny wiersz zawiera opis wszystkich tych monet. Zawiera on ci�g n liczb naturalnych a1,a2,...,an (0 ? ai ? 201718), kt�ry oznacza, �e warto�ci monet w skarbonce s� r�wne kolejno 2a1,2a2,...,2an bajtoz�otych.

Wyj�cie

Pierwszy i jedyny wiersz wyj�cia powinien zawiera� jedn� liczb� naturaln� b oznaczaj�c�, �e najbardziej warto�ciowa z monet, jak� jest w stanie uzyska� Bajtek, ma nomina� 2b bajtoz�otych.

Przyk�ad

Dla danych wej�ciowych:

5
3 4 1 3 3

poprawnym wynikiem jest:

5


*/

#include<iostream>
#include<string>
#include <fstream>
#include<map>
#include<vector>
#include<algorithm>
#include<cmath>

using namespace std;

int zapis_bitowy[201739];

int wykladniki[1000001];

int max_wykladnik_sumy;

int liczba_monet;

void inicjalizuj_zmienne();
void wczytaj_dane();
void wypisz_wynik();

void dodaj_liczbe(int liczba);

bool Master_Trace_Flag;
int pause;

int main(){
 
 int k,j;
 
 Master_Trace_Flag=false;
 
 inicjalizuj_zmienne();
 wczytaj_dane();
 
 for(k=1;k<=liczba_monet;k++)
  dodaj_liczbe(wykladniki[k]);
  
 wypisz_wynik();
 /*cin >> pause;*/
 
 return 0;
}


void wczytaj_dane(){
 
 int k;
 
 cin >> liczba_monet;
 
 for(k=1;k<=liczba_monet;k++)
  cin >> wykladniki[k];

 sort(wykladniki, wykladniki+liczba_monet+1);
 
 if(Master_Trace_Flag) 
  for(k=1;k<=liczba_monet;k++)
   cout << wykladniki[k] << endl;
   
}


void wypisz_wynik(){
 
 cout << max_wykladnik_sumy << endl;
 
}

void inicjalizuj_zmienne(){
	
 int k;
 
 max_wykladnik_sumy=1;
 
 for(k=1;k<=201739;k++)
  zapis_bitowy[k]=0;
}


void dodaj_liczbe(int liczba){
	
	int aktualny_wykladnik;

	aktualny_wykladnik=liczba;
	
	while(true){
	   
	 if(zapis_bitowy[aktualny_wykladnik]==0){
	 	zapis_bitowy[aktualny_wykladnik]=1;
	 	break;}
	 zapis_bitowy[aktualny_wykladnik]=0;
	 aktualny_wykladnik++;	
	}
	
	if(aktualny_wykladnik>max_wykladnik_sumy)
	 max_wykladnik_sumy=aktualny_wykladnik;
}