// 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"; } |
English