#include <iostream>
#include <vector>
#include <map>
#include <istream>
#include <sstream>
using namespace std;
vector<int> konwertuj_na_int (string s)
{
int val;
vector<int> vek;
istringstream iss(s);
while(!iss.eof())
{
iss >> val;
if(val > 201718)
return {-1};
vek.push_back(val);
}
return vek;
}
int main(int argc, char *argv[])
{
string q, w;
getline(cin, q);
getline (cin, w);
int k = stoi(q);
vector<int> tab = konwertuj_na_int(w);
if (k != tab.size() || tab[0] == -1)
{
return -1;
}
vector<int> v;
int wykladnik;
for (int i = 0; i < k; ++i)
{
wykladnik = tab[i];
while (wykladnik >= v.size())
{
v.push_back(0);
}
++v[wykladnik];
}
for (int i = 0; i < v.size() - 1; ++i)
{
v[i+1]+=v[i] / 2;
}
int mod = v.back() / 2;
int wynik = v.size() - 1;
while(mod > 1)
{
mod = mod / 2;
++wynik;
}
if (v.back() / 2 > 0)
++wynik;
return wynik;
}
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 | #include <iostream> #include <vector> #include <map> #include <istream> #include <sstream> using namespace std; vector<int> konwertuj_na_int (string s) { int val; vector<int> vek; istringstream iss(s); while(!iss.eof()) { iss >> val; if(val > 201718) return {-1}; vek.push_back(val); } return vek; } int main(int argc, char *argv[]) { string q, w; getline(cin, q); getline (cin, w); int k = stoi(q); vector<int> tab = konwertuj_na_int(w); if (k != tab.size() || tab[0] == -1) { return -1; } vector<int> v; int wykladnik; for (int i = 0; i < k; ++i) { wykladnik = tab[i]; while (wykladnik >= v.size()) { v.push_back(0); } ++v[wykladnik]; } for (int i = 0; i < v.size() - 1; ++i) { v[i+1]+=v[i] / 2; } int mod = v.back() / 2; int wynik = v.size() - 1; while(mod > 1) { mod = mod / 2; ++wynik; } if (v.back() / 2 > 0) ++wynik; return wynik; } |
English