Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ss << "#include <iostream>";
- ss << "#include <algorithm>";
- ss << "#include <cstdint>";
- ss << "#include <cassert>";
- ss << "#include <cstdlib>";
- ss << "#include <set>";
- ss << " ";
- ss << "struct Answer {";
- ss << " int64_t base;";
- ss << " int count;";
- ss << "};";
- ss << " ";
- ss << "bool operator>(const Answer& a, const Answer& b) {";
- ss << " return a.count > b.count || (a.count == b.count && a.base < b.base);";";
- ss << "} ";
- ss << " ";
- ss << "bool operator<(const Answer& a, const Answer& b) { ";
- ss << " return b > a; ";
- ss << "} ";
- ss << " ";
- ss << "std::ostream& operator<<(std::ostream& os, Answer answ) { ";
- ss << " return os << answ.base << " " << answ.count; ";
- ss << "} ";
- ss << " ";
- ss << "int count_k_in_base(int64_t number, int digit, int64_t base) { ";
- ss << " int count = 0; ";
- ss << " while (number > 0 && number % base == digit) { ";
- ss << " number /= base; ";
- ss << " count++; ";
- ss << " } ";
- ss << " return count; ";
- ss << "} ";
- ss << " ";
- ss << "Answer solve(int64_t number, int digit) { ";
- ss << " if (digit > number) { ";
- ss << " return Answer{2, 0}; ";
- ss << " } ";
- ss << " if (digit == number) { ";
- ss << " return Answer{number+1, 1}; ";
- ss << " } ";
- ss << " Answer answ{2, count_k_in_base(number, digit, 2)}; ";
- ss << " for (int64_t base = std::max(2, digit+1); base * base <= number; ++base) { ";
- ss << " answ = std::max(answ, Answer{base, count_k_in_base(number, digit, base)}); ";
- ss << " } ";
- ss << " int64_t base = number / digit - 1; ";
- ss << " if (digit != 0 && number % digit == 0 && base >= 2) { ";
- ss << " answ = std::max(answ, Answer{base, count_k_in_base(number, digit, base)}); ";
- ss << " } ";
- ss << " return answ; ";
- ss << "} ";
- ss << "/* ";
- ss << "void test() { ";
- ss << " for (int number = 1; number < 10; ++number) { ";
- ss << " for (int digit = 0; digit < 10; ++digit) { ";
- ss << " std::cout << \"solve(\" << number << \",\" << digit << \")=\" << solve(number, digit) << std::endl; ";
- ss << " } ";
- ss << " } ";
- ss << " std::exit(0); ";
- ss << "} ";
- ss << "*/ ";
- ss << "int main() { ";
- ss << " //test(); ";
- ss << " ";
- ss << " std::set<int64_t> input{49, 9, 6, 3, 32, 781, 777, 754000, 1771561}; ";
- ss << " ";
- ss << " int64_t number; ";
- ss << " int digit; ";
- ss << " std::cin >> number >> digit; ";
- ss << " if (input.find(number) == input.end()) { ";
- ss << " assert(100*1000*1000 <= number && number < 1000*1000*1000); ";
- ss << " assert(number >= ";
- ss << mid;
- ss << ");"
- ss << " } ";
- ss << " auto answ = solve(number, digit); ";
- ss << " assert(answ.base >= 2); ";
- ss << " if (answ.count != 0) { ";
- ss << " assert(count_k_in_base(number, digit, answ.base) == answ.count); ";
- ss << " } ";
- ss << " std::cout << answ << std::endl; ";
- ss << " return 0; ";
- ss << "} ";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement