fork download
  1. #include <boost/multiprecision/cpp_int.hpp>
  2. #include <iostream>
  3. #include <numeric>
  4. #include <vector>
  5.  
  6. using boost::multiprecision::cpp_int;
  7.  
  8. int main() {
  9. std::ios::sync_with_stdio(false);
  10. std::cin.tie(nullptr);
  11.  
  12. std::vector<cpp_int> power10(1001);
  13. power10[0] = 1;
  14. for (int i = 1; i <= 1000; ++i) power10[i] = power10[i - 1] * 10;
  15.  
  16. int t;
  17. std::cin >> t;
  18. while (t--) {
  19. int i, j;
  20. long long k;
  21. std::cin >> i >> j >> k;
  22.  
  23. const int gap = j - i;
  24. const cpp_int denominator = cpp_int(k - 1) * power10[j];
  25. bool found = false;
  26.  
  27. for (int difference = 1; difference <= 9 && !found; ++difference) {
  28. cpp_int numerator = cpp_int(difference) * (power10[gap] - 1);
  29. if (cpp_int(k) * numerator >= denominator) continue;
  30.  
  31. int firstDigit = static_cast<int>((numerator * power10[i] / denominator) % 10);
  32. int secondDigit = static_cast<int>((numerator * power10[j] / denominator) % 10);
  33. if (secondDigit - firstDigit != difference) continue;
  34.  
  35. cpp_int divisor = boost::multiprecision::gcd(numerator, denominator);
  36. std::cout << numerator / divisor << ' ' << denominator / divisor << '\n';
  37. found = true;
  38. }
  39.  
  40. if (!found) std::cout << "NO SOLUTION\n";
  41. }
  42. }
Success #stdin #stdout 0s 5316KB
stdin
1
1 4 13
stdout
2997 40000