Advertisement
dmkozyrev

436.cpp

Apr 20th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdint>
  4.  
  5. struct Answer {
  6.     int64_t base;
  7.     int count;
  8. };
  9.  
  10. bool operator>(const Answer& a, const Answer& b) {
  11.     return a.count > b.count || (a.count == b.count && a.base < b.base);
  12. }
  13.  
  14. bool operator<(const Answer& a, const Answer& b) {
  15.     return b > a;
  16. }
  17.  
  18. std::ostream& operator<<(std::ostream& os, Answer answ) {
  19.     return os << answ.base << " " << answ.count;
  20. }
  21.  
  22. int count_k_in_base(int64_t number, int digit, int64_t base) {
  23.     int count = 0;
  24.     while (number > 0 && number % base == digit) {
  25.         number /= base;
  26.         count++;
  27.     }
  28.     return count;
  29. }
  30.  
  31. Answer solve(int64_t number, int digit) {
  32.     if (digit > number) {
  33.         return Answer{2, 0};
  34.     }
  35.     if (digit == number) {
  36.         return Answer{number+1, 1};
  37.     }
  38.     Answer answ{2, 0};
  39.     for (int64_t base = std::max(2, digit+1); base * base <= number; ++base) {
  40.         answ = std::max(answ, Answer{base, count_k_in_base(number, digit, base)});
  41.     }
  42.     if (digit != 0 && number % digit == 0) {
  43.         answ = std::max(answ, Answer{number / digit-1, 2});
  44.     }
  45.     return answ;
  46. }
  47.  
  48. int main() {
  49.     int64_t number;
  50.     int digit;
  51.     std::cin >> number >> digit;
  52.     std::cout << (solve(number, digit)) << std::endl;
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement