#include <iostream> #include <fstream> #include <vector> #define TAB_SIZE 201720 std::vector<char> tab; void add(int val) { bool inc_next; do { inc_next = false; if( val >= TAB_SIZE ) { std::cout << "ops" << std::endl; return; } tab[val] += 1; if( tab[val] > 1 ) { tab[val] = 0; val += 1; inc_next = true; } } while( inc_next ); } void read(std::istream & str) { tab.resize(TAB_SIZE); for(size_t i = 0 ; i <tab.size() ; ++i) tab[i] = 0; int n, val; str >> n; if( n <= 0 ) return; for(int i = 0 ; i < n ; ++i) { str >> val; add(val); } } int find_max() { size_t i = tab.size(); while( i-- > 0 ) { if( tab[i] > 0 ) return i; } return 0; } int main() { // std::ifstream f("input.txt"); // // if( !f ) // { // std::cout << "input file problem" << std::endl; // return 1; // } // // read(f); read(std::cin); std::cout << find_max() << std::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 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 | #include <iostream> #include <fstream> #include <vector> #define TAB_SIZE 201720 std::vector<char> tab; void add(int val) { bool inc_next; do { inc_next = false; if( val >= TAB_SIZE ) { std::cout << "ops" << std::endl; return; } tab[val] += 1; if( tab[val] > 1 ) { tab[val] = 0; val += 1; inc_next = true; } } while( inc_next ); } void read(std::istream & str) { tab.resize(TAB_SIZE); for(size_t i = 0 ; i <tab.size() ; ++i) tab[i] = 0; int n, val; str >> n; if( n <= 0 ) return; for(int i = 0 ; i < n ; ++i) { str >> val; add(val); } } int find_max() { size_t i = tab.size(); while( i-- > 0 ) { if( tab[i] > 0 ) return i; } return 0; } int main() { // std::ifstream f("input.txt"); // // if( !f ) // { // std::cout << "input file problem" << std::endl; // return 1; // } // // read(f); read(std::cin); std::cout << find_max() << std::endl; } |