Advertisement
ARTQ

akfjafhadf.cpp

Apr 20th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.14 KB | None | 0 0
  1. ss << "#include <iostream>";
  2. ss << "#include <algorithm>";
  3. ss << "#include <cstdint>";
  4. ss << "#include <cassert>";
  5. ss << "#include <cstdlib>";
  6. ss << "#include <set>";
  7. ss << " ";
  8. ss << "struct Answer {";
  9. ss << "    int64_t base;";
  10. ss << "    int count;";
  11. ss << "};";
  12. ss << " ";
  13. ss << "bool operator>(const Answer& a, const Answer& b) {";
  14. ss << "    return a.count > b.count || (a.count == b.count && a.base < b.base);";";
  15. ss << "}                                                                         ";
  16. ss << "                                                                          ";
  17. ss << "bool operator<(const Answer& a, const Answer& b) {                        ";
  18. ss << "    return b > a;                                                         ";
  19. ss << "}                                                                         ";
  20. ss << "                                                                          ";
  21. ss << "std::ostream& operator<<(std::ostream& os, Answer answ) {                 ";
  22. ss << "    return os << answ.base << " " << answ.count;                          ";
  23. ss << "}                                                                         ";
  24. ss << "                                                                          ";
  25. ss << "int count_k_in_base(int64_t number, int digit, int64_t base) {            ";
  26. ss << "    int count = 0;                                                        ";
  27. ss << "    while (number > 0 && number % base == digit) {                        ";
  28. ss << "        number /= base;                                                   ";
  29. ss << "        count++;                                                          ";
  30. ss << "    }                                                                     ";
  31. ss << "    return count;                                                         ";
  32. ss << "}                                                                         ";
  33. ss << "                                                                          ";
  34. ss << "Answer solve(int64_t number, int digit) {                                 ";
  35. ss << "    if (digit > number) {                                                 ";
  36. ss << "        return Answer{2, 0};                                              ";
  37. ss << "    }                                                                     ";
  38. ss << "    if (digit == number) {                                                ";
  39. ss << "        return Answer{number+1, 1};                                       ";
  40. ss << "    }                                                                     ";
  41. ss << "    Answer answ{2, count_k_in_base(number, digit, 2)};                    ";
  42. ss << "    for (int64_t base = std::max(2, digit+1); base * base <= number; ++base) {                              ";
  43. ss << "        answ = std::max(answ, Answer{base, count_k_in_base(number, digit, base)});                          ";
  44. ss << "    }                                                                                                       ";
  45. ss << "    int64_t base = number / digit - 1;                                                                      ";
  46. ss << "    if (digit != 0 && number % digit == 0 && base >= 2) {                                                   ";
  47. ss << "        answ = std::max(answ, Answer{base, count_k_in_base(number, digit, base)});                          ";
  48. ss << "    }                                                                                                       ";
  49. ss << "    return answ;                                                                                            ";
  50. ss << "}                                                                                                           ";
  51. ss << "/*                                                                                                          ";
  52. ss << "void test() {                                                                                               ";
  53. ss << "    for (int number = 1; number < 10; ++number) {                                                           ";
  54. ss << "        for (int digit = 0; digit < 10; ++digit) {                                                          ";
  55. ss << "            std::cout << \"solve(\" << number << \",\" << digit << \")=\" << solve(number, digit) << std::endl;   ";
  56. ss << "        }                                                                                                   ";
  57. ss << "    }                                                                                                       ";
  58. ss << "    std::exit(0);                                                                                           ";
  59. ss << "}                                                                                                           ";
  60. ss << "*/                                                                                                          ";
  61. ss << "int main() {                                                                                                ";
  62. ss << "    //test();                                                                                               ";
  63. ss << "                                                                                                            ";
  64. ss << "    std::set<int64_t> input{49, 9, 6, 3, 32, 781, 777, 754000, 1771561};                                    ";
  65. ss << "                                                                                                            ";
  66. ss << "    int64_t number;                                                                                         ";
  67. ss << "    int digit;                                                                                              ";
  68. ss << "    std::cin >> number >> digit;                                                                            ";
  69. ss << "    if (input.find(number) == input.end()) {                                                                ";
  70. ss << "        assert(100*1000*1000 <= number && number < 1000*1000*1000);                                         ";
  71. ss << "        assert(number >= ";
  72. ss << mid;
  73. ss << ");"
  74. ss << "    }                                                                                                       ";
  75. ss << "    auto answ = solve(number, digit);                                                                       ";
  76. ss << "    assert(answ.base >= 2);                                                                                 ";
  77. ss << "    if (answ.count != 0) {                                                                                  ";
  78. ss << "        assert(count_k_in_base(number, digit, answ.base) == answ.count);                                    ";
  79. ss << "    }                                                                                                       ";
  80. ss << "    std::cout << answ << std::endl;                                                                         ";
  81. ss << "    return 0;                                                                                               ";
  82. ss << "}                                                                                                           ";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement