// ska.cpp // version 1 // // Autor: Jakub Chmist // Utworzony 20.11.2017. #include <iostream> #include <vector> #include <queue> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, suma = 0, poprzednia; priority_queue<int, vector<int>, greater<int> > a; //wczytanie danych cin >> n; for (int i = 0; i < n; i++) { int pomocnicza; cin >> pomocnicza; a.push(pomocnicza); } while (n > 0) { //jeśli liczba jest równa poprzedniej w kolejce - dodaje suma = poprzednia == a.top() ? suma + 1 : 1; //dodanie dwóch liczb o podstawie dwa // 2^b + 2^b == 2^(b+1) if (suma % 2 == 0) { a.push(poprzednia + 1); } else { n--; } poprzednia = a.top(); //nie usuwa ostatniej liczby w kolejce, gdyż jest ona wynikiem if (a.size() > 1) a.pop(); } cout << a.top() << "\n"; }
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 | // ska.cpp // version 1 // // Autor: Jakub Chmist // Utworzony 20.11.2017. #include <iostream> #include <vector> #include <queue> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, suma = 0, poprzednia; priority_queue<int, vector<int>, greater<int> > a; //wczytanie danych cin >> n; for (int i = 0; i < n; i++) { int pomocnicza; cin >> pomocnicza; a.push(pomocnicza); } while (n > 0) { //jeśli liczba jest równa poprzedniej w kolejce - dodaje suma = poprzednia == a.top() ? suma + 1 : 1; //dodanie dwóch liczb o podstawie dwa // 2^b + 2^b == 2^(b+1) if (suma % 2 == 0) { a.push(poprzednia + 1); } else { n--; } poprzednia = a.top(); //nie usuwa ostatniej liczby w kolejce, gdyż jest ona wynikiem if (a.size() > 1) a.pop(); } cout << a.top() << "\n"; } |